X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;ds=inline;f=FMD%2FAliFMDReconstructor.h;h=f0f2fc5b145387202918f73ed133ddd7d5ebdd32;hb=81ba01debb3f1e29d256d9d90609f178a171db36;hp=c8cbb31b384c9e5bb9d0449f69f39933bf36b3a7;hpb=8f1cfb0c86fec973aae9ff86677c33d999346ce8;p=u%2Fmrichter%2FAliRoot.git diff --git a/FMD/AliFMDReconstructor.h b/FMD/AliFMDReconstructor.h index c8cbb31b384..f0f2fc5b145 100644 --- a/FMD/AliFMDReconstructor.h +++ b/FMD/AliFMDReconstructor.h @@ -1,6 +1,5 @@ #ifndef ALIFMDRECONSTRUCTOR_H #define ALIFMDRECONSTRUCTOR_H -// -*- mode: c++ -*- // // Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights // reserved. @@ -12,80 +11,198 @@ // //-- Authors: Evgeny Karpechev (INR) and Alla Maevskaia (INR) // Latest changes by Christian Holm Christensen -/* - Reconstruct nember of particles in given group of pads for given - FMDvolume determine by numberOfVolume , - numberOfMinSector,numberOfMaxSector, numberOfMinRing, - numberOfMaxRing Reconstruction method choose dependence on number - of empty pads - */ /* $Id$ */ +/** @file AliFMDReconstructor.h + @author Christian Holm Christensen + @date Mon Mar 27 12:47:09 2006 + @brief FMD reconstruction +*/ + +//____________________________________________________________________ +// Header guards in the header files speeds up the compilation +// considerably. Please leave them in. +#ifndef ALIRECONSTRUCTOR_H +# include +#endif -#include -#include +#include "AliLog.h" //____________________________________________________________________ +class TTree; class TClonesArray; -class AliFMD; -class AliLoader; -class AliRunLoader; class AliFMDDigit; class AliRawReader; -typedef AliFMDMap AliFMDAdcMap; +class AliESDEvent; +class AliESDFMD; +class TH1; +/** @defgroup FMD_rec Reconstruction */ //____________________________________________________________________ +/** @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 { -protected: - mutable AliFMDAdcMap fAdcs; - mutable AliRunLoader* fRunLoader; - mutable AliLoader* fFMDLoader; - mutable TClonesArray* fParticles; - mutable AliFMD* fFMD; - - Float_t fDeltaEta; - Float_t fDeltaPhi; - UShort_t fThreshold; - Float_t fPedestal; - Float_t fPedestalWidth; - mutable Int_t fEmptyStrips; - mutable Int_t fTotalStrips; - - enum { - kMaxDetectors = 3, - kMaxRings = 2, - kMaxSectors = 20, - kMaxStrips = 512 - }; - public: + /** CTOR */ AliFMDReconstructor(); - virtual ~AliFMDReconstructor() {} + /** DTOR */ + virtual ~AliFMDReconstructor(); - void SetDeltaEta(Float_t deta=.1) { fDeltaEta = deta; } - void SetDeltaPhi(Float_t dphi=360) { fDeltaPhi = dphi; } - void SetThreshold(UShort_t t=6) { fThreshold = t; } - void SetPedestal(Float_t mean=10, Float_t width=1); - - virtual void Reconstruct(AliRunLoader* runLoader) const; - virtual void Reconstruct(AliRunLoader* runLoader, - AliRawReader* rawReader) const; - virtual void FillESD(AliRunLoader* runLoader, AliESD* esd) const; - + /** Initialize the reconstructor. Here, we initialize the geometry + 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). + */ + virtual void Init(); + /** Flag that we can convert raw data into digits. + @return always @c true */ + virtual Bool_t HasDigitConversion() const { return kTRUE; } + /** Convert raw data read from the AliRawReader @a reader into + digits. This is done using AliFMDRawReader and + AliFMDAltroReader. The digits are put in the passed TTree @a + digitsTree. + @param reader Raw reader. + @param digitsTree Tree to store read digits in. */ + virtual void ConvertDigits(AliRawReader* reader, TTree* digitsTree) const; + /** 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 + created in parallel. + @todo Make sure we get a vertex. + @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 clusterTree Tree of reconstructed points for this event + - not used. + @param esd ESD object to store data in. + */ + virtual void FillESD(TTree* digitsTree, TTree* clusterTree, + AliESDEvent* esd) const; + /** Forwards to above member function */ + virtual void FillESD(AliRawReader*, TTree* clusterTree, + AliESDEvent* esd) const; + /** Not used */ + 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: - virtual void ProcessEvent(Int_t event, - AliRawReader* rawReader, - TClonesArray* digits) const; - virtual Bool_t ReadAdcs(TClonesArray* digits) const; - virtual Bool_t ReadAdcs(AliRawReader* rawReader) const; - virtual void ProcessDigit(AliFMDDigit* digit) const; + /** Copy CTOR + @param other Object to copy from. */ + AliFMDReconstructor(const AliFMDReconstructor& other); + /** Assignment operator + @param other Object to assign from + @return reference to this object */ + AliFMDReconstructor& operator=(const AliFMDReconstructor& other); + /** 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$ + M@f$. + @param digits Array of digits. */ + virtual void ProcessDigits(TClonesArray* digits) const; + /** Substract pedestals from raw ADC in @a digit + @param digit Digit data + @return Pedestal subtracted ADC count. */ virtual UShort_t SubtractPedestal(AliFMDDigit* digit) const; - virtual void ReconstructFromCache(Float_t zVertex) const; - ClassDef(AliFMDReconstructor, 0) // class for the FMD reconstruction + /** Converts number of ADC counts to energy deposited. This is + done by + @f[ + E_i = A_i g_i + @f] + where @f$ A_i@f$ is the pedestal subtracted ADC counts, and @f$ + g_i@f$ is the gain for the @f$ i^{\mbox{th}}@f$ strip. + @param digit Raw data + @param eta Psuedo-rapidity of digit. + @param count Pedestal subtracted ADC counts + @return Energy deposited @f$ E_i@f$ */ + virtual Float_t Adc2Energy(AliFMDDigit* digit, Float_t eta, + UShort_t count) const; + /** Converts an energy signal to number of particles. In this + implementation, it's done by + @f[ + M_i = E_i / E_{\mbox{MIP}} + @f] + where @f$ E_i@f$ is the energy deposited, and @f$ + E_{\mbox{MIP}}@f$ is the average energy deposited by a minimum + ionizing particle + @param digit Raw data + @param edep Energy deposited @f$ E_i@f$ + @return Psuedo-inclusive multiplicity @f$ M@f$ */ + virtual Float_t Energy2Multiplicity(AliFMDDigit* digit, Float_t edep) const; + /** Calculate the physical coordinates psuedo-rapidity @f$ \eta@f$, + azimuthal angle @f$ \varphi@f$ of the strip corresponding to + the digit @a digit. This is done by using the information + obtained, and previously cached by AliFMDGeometry, from the + TGeoManager. + @param digit Digit. + @param eta On return, psuedo-rapidity @f$ \eta@f$ + @param phi On return, azimuthal angle @f$ \varphi@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 + 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 //____________________________________________________________________ // +// Local Variables: +// mode: C++ +// End: +// // EOF //