LCOV - code coverage report
Current view: top level - STEER/ESD - AliESDFMD.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 5 15 33.3 %
Date: 2016-06-14 17:26:59 Functions: 8 23 34.8 %

          Line data    Source code
       1             : #ifndef ALIESDFMD_H
       2             : #define ALIESDFMD_H
       3             : /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights
       4             :  * reserved. 
       5             :  *
       6             :  * See cxx source for full Copyright notice                               
       7             :  */
       8             : //___________________________________________________________________
       9             : //
      10             : // AliESDFMD is the Event Summary Data entry for the FMD.  It contains
      11             : // a rough estimate of the charged particle multiplicity in each strip
      12             : // of the FMD.    It also contains the psuedo-rapidity of each strip.
      13             : // This is important, as it varies from event to event, due to a
      14             : // finite interaction point probability distribution. 
      15             : //
      16             : #ifndef ROOT_TObject
      17             : # include <TObject.h>
      18             : #endif
      19             : #ifndef ALIFMDFLOATMAP_H
      20             : # include "AliFMDFloatMap.h"
      21             : #endif
      22             : 
      23             : //___________________________________________________________________
      24             : /** @class AliESDFMD 
      25             :     @brief Event Summary Data for the Forward Multiplicity Detector. 
      26             :     @ingroup FMD_data
      27             :     This stores the psuedo-multiplicity and -rapidiy for each strip of
      28             :     the FMD. 
      29             :  */
      30             : class AliESDFMD : public TObject
      31             : {
      32             : public:
      33             :   /** 
      34             :    * Base class of looping over the FMD ESD object 
      35             :    *
      36             :    * A simple example could be 
      37             :    * 
      38             :    * @code 
      39             :    * struct ESDFMDPrinter : AliESDFMD::ForOne
      40             :    * { 
      41             :    *   Bool_t operator()(UShort_t d, Char_t r, UShort_t s, UShort_t t,
      42             :    *                     Float_t m, Float_t e) 
      43             :    *   { 
      44             :    *     Printf("FMD%d%c[%2d,%3d]=%7.4f @ %7.4f", d, r, s, t, m, e);
      45             :    *     return kTRUE;
      46             :    *   }
      47             :    * };
      48             :    * @endcode
      49             :    */
      50           0 :   class ForOne 
      51             :   {
      52             :   public:
      53             :     /** 
      54             :      * Destructor
      55             :      */    
      56           0 :     virtual ~ForOne() {}
      57             :     /** 
      58             :      * Functional operator called for each entry 
      59             :      * 
      60             :      * @param d Detector number
      61             :      * @param r Ring identifier 
      62             :      * @param s Sector number
      63             :      * @param t Strip number
      64             :      * @param m 'Bare' multiplicity of this strip
      65             :      * @param e Pseudo-rapidity of this strip
      66             :      * 
      67             :      * @return @c kTRUE in case of success, @c kFALSE in case of failure.
      68             :      *         If the method returns @c kFALSE, the loop stops. 
      69             :      */    
      70             :     virtual bool operator()(UShort_t d, Char_t r, UShort_t s, UShort_t t, 
      71             :                               Float_t m, Float_t e) = 0;
      72             :   };
      73             :   enum { 
      74             :     kNeedNoiseFix = (1 << 14)
      75             :   };
      76             :   /** 
      77             :    * Default constructor 
      78             :    */
      79             :   AliESDFMD();
      80             :   /** 
      81             :    * Copy constructor 
      82             :    * 
      83             :    * @param other Object to construct from 
      84             :    */
      85             :   AliESDFMD(const AliESDFMD& other);
      86             :   /** 
      87             :    * Assignment operator 
      88             :    * 
      89             :    * @param other Object to assign from
      90             :    *
      91             :    * @return  reference to this object 
      92             :    */
      93             :   AliESDFMD& operator=(const AliESDFMD& other);
      94             :   /** 
      95             :    * Destructor - does nothing 
      96             :    */
      97          72 :   virtual ~AliESDFMD() {}
      98             :   /** 
      99             :    * Copy the content of this object to @a obj which must have been 
     100             :    * preallocated
     101             :    *
     102             :    * @param obj Object to copy to
     103             :    */
     104             :   virtual void Copy(TObject &obj) const;
     105             : 
     106             :   /**
     107             :    * Reset the object 
     108             :    */
     109             :   void Clear(Option_t *option="");
     110             :   /** 
     111             :    * Get the pseudo-multiplicity of 
     112             :    * @f$ \text{FMD}\langle detector\rangle\lange ring\rangle_{\langle
     113             :    * sector\rangle\langle strip\rangle}@f$ 
     114             :    * 
     115             :    * @param detector Detector number (1-3)
     116             :    * @param ring     Ring identifier ('I' or 'O')
     117             :    * @param sector   Sector number (0-511, or 0-255)
     118             :    * @param strip    Strip number (0-19, or 0-39)
     119             :    *
     120             :    * @return Psuedo multiplicity 
     121             :    */
     122             :   Float_t Multiplicity(UShort_t detector, Char_t ring, 
     123             :                        UShort_t sector, UShort_t strip) const;
     124             :   /** 
     125             :    * Get the pseudo-rapidity of 
     126             :    * @f$ \text{FMD}\langle detector\rangle\lange ring\rangle_{\langle
     127             :    * sector\rangle\langle strip\rangle}@f$ 
     128             :    *
     129             :    * @param detector Detector number (1-3)
     130             :    * @param ring     Ring identifier ('I' or 'O')
     131             :    * @param sector   Sector number (0-511, or 0-255)
     132             :    * @param strip    Strip number (0-19, or 0-39)
     133             :    *
     134             :    * @return Psuedo rapidity 
     135             :    */
     136             :   Float_t Eta(UShort_t detector, Char_t ring, 
     137             :               UShort_t sector, UShort_t strip) const;
     138             :   /** 
     139             :    * Get the azimuthal angle of 
     140             :    * @f$ \text{FMD}\langle detector\rangle\lange ring\rangle_{\langle
     141             :    * sector\rangle\langle strip\rangle}@f$ 
     142             :    *
     143             :    * @param detector Detector number (1-3)
     144             :    * @param ring     Ring identifier ('I' or 'O')
     145             :    * @param sector   Sector number (0-511, or 0-255)
     146             :    * @param strip    Strip number (0-19, or 0-39)
     147             :    *
     148             :    * @return Azimuthal angle 
     149             :    */
     150             :   Float_t Phi(UShort_t detector, Char_t ring, 
     151             :               UShort_t sector, UShort_t strip) const;
     152             :   /** 
     153             :    * Get the polar angle (in degrees) from beam line of 
     154             :    * @f$ \text{FMD}\langle detector\rangle\lange ring\rangle_{\langle
     155             :    * sector\rangle\langle strip\rangle}@f$ 
     156             :    *
     157             :    * @param detector Detector number (1-3)
     158             :    * @param ring     Ring identifier ('I' or 'O')
     159             :    * @param sector   Sector number (0-511, or 0-255)
     160             :    * @param strip    Strip number (0-19, or 0-39)
     161             :    *
     162             :    * @return Polar angle
     163             :    */
     164             :   Float_t Theta(UShort_t detector, Char_t ring, 
     165             :                 UShort_t sector, UShort_t strip) const;
     166             :   /** 
     167             :    * Get the radial distance (in cm) from beam line of 
     168             :    * @f$ \text{FMD}\langle detector\rangle\lange ring\rangle_{\langle
     169             :    * sector\rangle\langle strip\rangle}@f$ 
     170             :    *
     171             :    * @param detector Detector number (1-3)
     172             :    * @param ring     Ring identifier ('I' or 'O')
     173             :    * @param sector   Sector number (0-511, or 0-255)
     174             :    * @param strip    Strip number (0-19, or 0-39)
     175             :    *
     176             :    * @return Radial distance
     177             :    */
     178             :   Float_t R(UShort_t detector, Char_t ring, 
     179             :             UShort_t sector, UShort_t strip) const;
     180             :   /** 
     181             :    * Set the pseudo-multiplicity of 
     182             :    * @f$ \text{FMD}\langle detector\rangle\lange ring\rangle_{\langle
     183             :    * sector\rangle\langle strip\rangle}@f$ 
     184             :    * 
     185             :    * @param detector Detector number (1-3)
     186             :    * @param ring     Ring identifier ('I' or 'O')
     187             :    * @param sector   Sector number (0-511, or 0-255)
     188             :    * @param strip    Strip number (0-19, or 0-39)
     189             :    * @param mult     Psuedo multiplicity 
     190             :    */
     191             :   void SetMultiplicity(UShort_t detector, Char_t ring, 
     192             :                        UShort_t sector, UShort_t strip, 
     193             :                        Float_t mult);
     194             :   /** 
     195             :    * Set the pseudo-rapidity of 
     196             :    * @f$ \text{FMD}\langle detector\rangle\lange ring\rangle_{\langle
     197             :    * sector\rangle\langle strip\rangle}@f$ 
     198             :    * 
     199             :    * @param detector Detector number (1-3)
     200             :    * @param ring     Ring identifier ('I' or 'O')
     201             :    * @param sector   Sector number (0-511, or 0-255)
     202             :    * @param strip    Strip number (0-19, or 0-39)
     203             :    * @param eta      Psuedo rapidity 
     204             :    */
     205             :   void SetEta(UShort_t detector, Char_t ring, 
     206             :               UShort_t sector, UShort_t strip, 
     207             :               Float_t eta);
     208             :   /** 
     209             :    * @param f the factor for noise suppression 
     210             :    */
     211          28 :   void SetNoiseFactor(Float_t f) { fNoiseFactor = f; }
     212             :   /** 
     213             :    * @param done Whether we've done angle correction or not 
     214             :    */
     215          14 :   void SetAngleCorrected(Bool_t done) { fAngleCorrected = done; }
     216             :   /** 
     217             :    * @return Whether we've done angle correction or not 
     218             :    */
     219       32768 :   Bool_t IsAngleCorrected() const { return fAngleCorrected; }
     220             :   /** 
     221             :    * @return the  factor for noise suppression 
     222             :    */
     223           0 :   Float_t GetNoiseFactor() const { return fNoiseFactor; }
     224             :   /** 
     225             :    * @return maximum number of detectors 
     226             :    */
     227           0 :   UShort_t MaxDetectors() const { return fMultiplicity.MaxDetectors(); }
     228             :   /** 
     229             :    * @return maximum number of rings 
     230             :    */
     231           0 :   UShort_t MaxRings()     const { return fMultiplicity.MaxRings(); }
     232             :   /** 
     233             :    * @return maximum number of sectors 
     234             :    */
     235           0 :   UShort_t MaxSectors()   const { return fMultiplicity.MaxSectors(); }
     236             :   /** 
     237             :    * @return Maximum number of strips 
     238             :    */
     239           0 :   UShort_t MaxStrips()    const { return fMultiplicity.MaxStrips(); }
     240             :   /** 
     241             :    * Print this object to standard out. 
     242             :    * 
     243             :    * @param option Options 
     244             :    */
     245             :   void Print(Option_t* option="") const;
     246             :   /** 
     247             :    * Check if we need the @c UShort_t fix 
     248             :    * 
     249             :    * @param file File this object was read from 
     250             :    */
     251             :   void CheckNeedUShort(TFile* file);
     252             :   /** 
     253             :    * Check if we need the noise fix 
     254             :    * 
     255             :    * @return true if class version of read object is 3 or smaller 
     256             :    */
     257           0 :   Bool_t NeedNoiseFix() const { return TestBit(kNeedNoiseFix); }
     258             :   /** 
     259             :    * Call the function operator of the passed object @a algo for each
     260             :    * entry in this object
     261             :    * 
     262             :    * @param algo Algorithm
     263             :    * 
     264             :    * @return @c kTRUE on success, @c kFALSE if the passed object
     265             :    * failed at any entry.  It will return immediately on error. 
     266             :    */
     267             :   Bool_t ForEach(ForOne& algo) const;
     268             :   enum {
     269             :     /** Value used for undefined multiplicity */
     270             :     kInvalidMult = 1024
     271             :   };
     272             :   enum {
     273             :     /** Value used for undefined pseudo rapidity */
     274             :     kInvalidEta = 1024
     275             :   };
     276             :   /** 
     277             :    * @return constant reference to multiplicity map 
     278             :    */
     279           0 :   const AliFMDFloatMap& MultiplicityMap() const { return fMultiplicity; }
     280             :   /** 
     281             :    * @return constant reference to pseudo-rapidity map 
     282             :    */
     283           0 :   const AliFMDFloatMap& EtaMap() const { return fEta; }
     284             : protected:
     285             :   AliFMDFloatMap fMultiplicity;   // Psuedo multplicity per strip
     286             :   AliFMDFloatMap fEta;            // Psuedo-rapidity per strip
     287             :   Float_t        fNoiseFactor;    // Factor used for noise suppresion
     288             :   Bool_t         fAngleCorrected; // Whether we've done angle correction
     289        1216 :   ClassDef(AliESDFMD,4)           // ESD info from FMD
     290             : };
     291             : #endif
     292             : //____________________________________________________________________
     293             : //
     294             : // Local Variables:
     295             : //   mode: C++
     296             : // End:
     297             : //
     298             : // EOF
     299             : //

Generated by: LCOV version 1.11