ROOT logo
// This class calculates the exclusive charged particle density
// in each for the 5 FMD rings. 
//
#ifndef ALIFMDCORRECTOR_H
#define ALIFMDCORRECTOR_H
/**
 * @file   AliFMDCorrector.h
 * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
 * @date   Wed Mar 23 14:01:02 2011
 * 
 * @brief  
 * 
 * @ingroup pwglf_forward_aod
 * 
 */
#include <TNamed.h>
#include <TList.h>
#include "AliForwardUtil.h"
class TH2D;
class TH2;
/** 
 * @defgroup pwglf_forward_algo Algorithms 
 *
 * Various sub-algorithms used in the analysis 
 *
 * @ingroup pwglf_forward 
 */
/** 
 * This class calculates the exclusive charged particle density
 * in each for the 5 FMD rings. 
 *
 * @par Input:
 *   - 5 RingHistos objects - each with a number of vertex dependent 
 *     2D histograms of the inclusive charge particle density 
 *
 * @par Output:
 *   - 5 RingHistos objects - each with a number of vertex dependent 
 *     2D histograms of the exclusive charge particle density 
 * 
 * @par Corrections used: 
 *   - AliFMDCorrSecondaryMap;
 *   - AliFMDCorrVertexBias
 *   - AliFMDCorrMergingEfficiency
 *
 * @ingroup pwglf_forward_algo 
 * @ingroup pwglf_forward_aod
 */
class AliFMDCorrector : public TNamed
{
public:
  /** 
   * Constructor 
   */
  AliFMDCorrector();
  /** 
   * Constructor 
   * 
   * @param name Name of object
   */
  AliFMDCorrector(const char* name);
  /** 
   * Copy constructor 
   * 
   * @param o Object to copy from 
   */
  AliFMDCorrector(const AliFMDCorrector& o);
  /** 
   * Destructor 
   */
  virtual ~AliFMDCorrector();
  /** 
   * Assignement operator
   * 
   * @param o Object to assign from 
   * 
   * @return Reference to this object
   */
  AliFMDCorrector& operator=(const AliFMDCorrector&);
  /** 
   * Initialize this object
   *
   * @param etaAxis Eta axis to use  -- not used
   */
  virtual void SetupForData(const TAxis& etaAxis);
  /**
   * Do the calculations 
   * 
   * @param hists    Cache of histograms 
   * @param vtxBin   Vertex bin 
   * 
   * @return true on successs 
   */
  virtual Bool_t Correct(AliForwardUtil::Histos& hists, UShort_t vtxBin);
  /** 
   * Scale the histograms to the total number of events 
   * 
   * @param dir     Where the output is stored
   * @param output  Output list 
   * @param nEvents Number of events 
   */
  virtual void Terminate(const TList* dir, TList* output, Int_t nEvents);
  /** 
   * Output diagnostic histograms to directory 
   * 
   * @param dir List to write in
   */  
  virtual void CreateOutputObjects(TList* dir);
  /** 
   * Set the debug level.  The higher the value the more output 
   * 
   * @param dbg Debug level 
   */
  void SetDebug(Int_t dbg=1) { fDebug = dbg; }
  /** 
   * @{
   * @name Enable/disable parts of the corrections
   */
  /** 
   *  Whether to do correction for secondaries
   *
   * @param use If true, use the secondary correction
   */
  void SetUseSecondaryMap(Bool_t use=true) { fUseSecondaryMap = use; }
  /**
   * Check
   *
   * @return true if the correction for secondaries is done
   */
  Bool_t IsUseSecondaryMap() const { return fUseSecondaryMap; }
  /**
   *  Whether to do correction for vertex bias
   *
   * @param use If true, use the vertex bias correction
   */
  void SetUseVertexBias(Bool_t use=true) { fUseVertexBias = use; }
  /**
   * Check
   *
   * @return true if the correction for vertex bias is done
   */
  Bool_t IsUseVertexBias() const { return fUseVertexBias; }
  /**
   *  Whether to do correction for dead-channel acceptance
   *
   * @param use If true, use the dead-channel acceptance correction
   */
  void SetUseAcceptance(Bool_t use=true) { fUseAcceptance = use; }
  /**
   * Check
   *
   * @return true if the correction for dead-channel acceptance is done
   */
  Bool_t IsUseAcceptance() const { return fUseAcceptance; }
  /**
   * Whether to use the merging efficiency correction
   *
   * @param use If true, use the merging efficiency correction
   */
  void SetUseMergingEfficiency(Bool_t use=true) { fUseMergingEfficiency = use; }
  /**
   * Check
   *
   * @return true if the merging efficiency correction is used.
   */
  Bool_t IsUseMergingEfficiency() const { return fUseMergingEfficiency; }
  /* @} */

  /**
   * Print information
   * 
   * @param option Not used 
   */
  virtual void Print(Option_t* option="") const;
protected:
  /** 
   * Internal data structure to keep track of the histograms
   */
  struct RingHistos : public AliForwardUtil::RingHistos 
  { 
    /** 
     * Default CTOR
     */
    RingHistos();
    /** 
     * Constructor
     * 
     * @param d detector
     * @param r ring 
     */
    RingHistos(UShort_t d, Char_t r);
    /** 
     * Copy constructor 
     * 
     * @param o Object to copy from 
     */
    RingHistos(const RingHistos& o);
    /** 
     * Assignment operator 
     * 
     * @param o Object to assign from 
     * 
     * @return Reference to this 
     */
    RingHistos& operator=(const RingHistos& o);
    /** 
     * Destructor 
     */
    ~RingHistos();
    /** 
     * Make output 
     * 
     * @param dir Where to put it 
     */
    void CreateOutputObjects(TList* dir);
    /** 
     * Scale the histograms to the total number of events 
     * 
     * @param dir     where the output is stored
     * @param nEvents Number of events 
     */
    void Terminate(TList* dir, Int_t nEvents);
    TH2D*     fDensity;      // Distribution primary Nch
    ClassDef(RingHistos,2);
  };
  /** 
   * Get the ring histogram container 
   * 
   * @param d Detector
   * @param r Ring 
   * 
   * @return Ring histogram container 
   */
  RingHistos* GetRingHistos(UShort_t d, Char_t r) const;
  /** 
   * Divide a map with another map.  This is a reimplementation of
   * TH1::Divide, but we assume compatible histograms, and the under-
   * and overflow bins are only divided if the third argument is true.
   * 
   * @param num             Numerator. On return contains the result 
   * @param denom           Denominator
   * @param alsoUnderOver   If true, also divide under/overflow bins
   */
  void DivideMap(TH2* num, const TH2* denom, Bool_t alsoUnderOver=false) const;
  TList    fRingHistos;           // List of histogram containers
  Bool_t   fUseSecondaryMap;      // Whether to do correction for secondaries
  Bool_t   fUseVertexBias;        // Whether to do correction for vertex bias
  Bool_t   fUseAcceptance;        // Whether to do correction for dead ch's.
  Bool_t   fUseMergingEfficiency; // Whether to use the merging efficiency
  Int_t    fDebug;                //  Debug level 

  ClassDef(AliFMDCorrector,4); // Correct the inclusive d2N/detadphi
};

#endif
// Local Variables:
//   mode: C++
// End:

 AliFMDCorrector.h:1
 AliFMDCorrector.h:2
 AliFMDCorrector.h:3
 AliFMDCorrector.h:4
 AliFMDCorrector.h:5
 AliFMDCorrector.h:6
 AliFMDCorrector.h:7
 AliFMDCorrector.h:8
 AliFMDCorrector.h:9
 AliFMDCorrector.h:10
 AliFMDCorrector.h:11
 AliFMDCorrector.h:12
 AliFMDCorrector.h:13
 AliFMDCorrector.h:14
 AliFMDCorrector.h:15
 AliFMDCorrector.h:16
 AliFMDCorrector.h:17
 AliFMDCorrector.h:18
 AliFMDCorrector.h:19
 AliFMDCorrector.h:20
 AliFMDCorrector.h:21
 AliFMDCorrector.h:22
 AliFMDCorrector.h:23
 AliFMDCorrector.h:24
 AliFMDCorrector.h:25
 AliFMDCorrector.h:26
 AliFMDCorrector.h:27
 AliFMDCorrector.h:28
 AliFMDCorrector.h:29
 AliFMDCorrector.h:30
 AliFMDCorrector.h:31
 AliFMDCorrector.h:32
 AliFMDCorrector.h:33
 AliFMDCorrector.h:34
 AliFMDCorrector.h:35
 AliFMDCorrector.h:36
 AliFMDCorrector.h:37
 AliFMDCorrector.h:38
 AliFMDCorrector.h:39
 AliFMDCorrector.h:40
 AliFMDCorrector.h:41
 AliFMDCorrector.h:42
 AliFMDCorrector.h:43
 AliFMDCorrector.h:44
 AliFMDCorrector.h:45
 AliFMDCorrector.h:46
 AliFMDCorrector.h:47
 AliFMDCorrector.h:48
 AliFMDCorrector.h:49
 AliFMDCorrector.h:50
 AliFMDCorrector.h:51
 AliFMDCorrector.h:52
 AliFMDCorrector.h:53
 AliFMDCorrector.h:54
 AliFMDCorrector.h:55
 AliFMDCorrector.h:56
 AliFMDCorrector.h:57
 AliFMDCorrector.h:58
 AliFMDCorrector.h:59
 AliFMDCorrector.h:60
 AliFMDCorrector.h:61
 AliFMDCorrector.h:62
 AliFMDCorrector.h:63
 AliFMDCorrector.h:64
 AliFMDCorrector.h:65
 AliFMDCorrector.h:66
 AliFMDCorrector.h:67
 AliFMDCorrector.h:68
 AliFMDCorrector.h:69
 AliFMDCorrector.h:70
 AliFMDCorrector.h:71
 AliFMDCorrector.h:72
 AliFMDCorrector.h:73
 AliFMDCorrector.h:74
 AliFMDCorrector.h:75
 AliFMDCorrector.h:76
 AliFMDCorrector.h:77
 AliFMDCorrector.h:78
 AliFMDCorrector.h:79
 AliFMDCorrector.h:80
 AliFMDCorrector.h:81
 AliFMDCorrector.h:82
 AliFMDCorrector.h:83
 AliFMDCorrector.h:84
 AliFMDCorrector.h:85
 AliFMDCorrector.h:86
 AliFMDCorrector.h:87
 AliFMDCorrector.h:88
 AliFMDCorrector.h:89
 AliFMDCorrector.h:90
 AliFMDCorrector.h:91
 AliFMDCorrector.h:92
 AliFMDCorrector.h:93
 AliFMDCorrector.h:94
 AliFMDCorrector.h:95
 AliFMDCorrector.h:96
 AliFMDCorrector.h:97
 AliFMDCorrector.h:98
 AliFMDCorrector.h:99
 AliFMDCorrector.h:100
 AliFMDCorrector.h:101
 AliFMDCorrector.h:102
 AliFMDCorrector.h:103
 AliFMDCorrector.h:104
 AliFMDCorrector.h:105
 AliFMDCorrector.h:106
 AliFMDCorrector.h:107
 AliFMDCorrector.h:108
 AliFMDCorrector.h:109
 AliFMDCorrector.h:110
 AliFMDCorrector.h:111
 AliFMDCorrector.h:112
 AliFMDCorrector.h:113
 AliFMDCorrector.h:114
 AliFMDCorrector.h:115
 AliFMDCorrector.h:116
 AliFMDCorrector.h:117
 AliFMDCorrector.h:118
 AliFMDCorrector.h:119
 AliFMDCorrector.h:120
 AliFMDCorrector.h:121
 AliFMDCorrector.h:122
 AliFMDCorrector.h:123
 AliFMDCorrector.h:124
 AliFMDCorrector.h:125
 AliFMDCorrector.h:126
 AliFMDCorrector.h:127
 AliFMDCorrector.h:128
 AliFMDCorrector.h:129
 AliFMDCorrector.h:130
 AliFMDCorrector.h:131
 AliFMDCorrector.h:132
 AliFMDCorrector.h:133
 AliFMDCorrector.h:134
 AliFMDCorrector.h:135
 AliFMDCorrector.h:136
 AliFMDCorrector.h:137
 AliFMDCorrector.h:138
 AliFMDCorrector.h:139
 AliFMDCorrector.h:140
 AliFMDCorrector.h:141
 AliFMDCorrector.h:142
 AliFMDCorrector.h:143
 AliFMDCorrector.h:144
 AliFMDCorrector.h:145
 AliFMDCorrector.h:146
 AliFMDCorrector.h:147
 AliFMDCorrector.h:148
 AliFMDCorrector.h:149
 AliFMDCorrector.h:150
 AliFMDCorrector.h:151
 AliFMDCorrector.h:152
 AliFMDCorrector.h:153
 AliFMDCorrector.h:154
 AliFMDCorrector.h:155
 AliFMDCorrector.h:156
 AliFMDCorrector.h:157
 AliFMDCorrector.h:158
 AliFMDCorrector.h:159
 AliFMDCorrector.h:160
 AliFMDCorrector.h:161
 AliFMDCorrector.h:162
 AliFMDCorrector.h:163
 AliFMDCorrector.h:164
 AliFMDCorrector.h:165
 AliFMDCorrector.h:166
 AliFMDCorrector.h:167
 AliFMDCorrector.h:168
 AliFMDCorrector.h:169
 AliFMDCorrector.h:170
 AliFMDCorrector.h:171
 AliFMDCorrector.h:172
 AliFMDCorrector.h:173
 AliFMDCorrector.h:174
 AliFMDCorrector.h:175
 AliFMDCorrector.h:176
 AliFMDCorrector.h:177
 AliFMDCorrector.h:178
 AliFMDCorrector.h:179
 AliFMDCorrector.h:180
 AliFMDCorrector.h:181
 AliFMDCorrector.h:182
 AliFMDCorrector.h:183
 AliFMDCorrector.h:184
 AliFMDCorrector.h:185
 AliFMDCorrector.h:186
 AliFMDCorrector.h:187
 AliFMDCorrector.h:188
 AliFMDCorrector.h:189
 AliFMDCorrector.h:190
 AliFMDCorrector.h:191
 AliFMDCorrector.h:192
 AliFMDCorrector.h:193
 AliFMDCorrector.h:194
 AliFMDCorrector.h:195
 AliFMDCorrector.h:196
 AliFMDCorrector.h:197
 AliFMDCorrector.h:198
 AliFMDCorrector.h:199
 AliFMDCorrector.h:200
 AliFMDCorrector.h:201
 AliFMDCorrector.h:202
 AliFMDCorrector.h:203
 AliFMDCorrector.h:204
 AliFMDCorrector.h:205
 AliFMDCorrector.h:206
 AliFMDCorrector.h:207
 AliFMDCorrector.h:208
 AliFMDCorrector.h:209
 AliFMDCorrector.h:210
 AliFMDCorrector.h:211
 AliFMDCorrector.h:212
 AliFMDCorrector.h:213
 AliFMDCorrector.h:214
 AliFMDCorrector.h:215
 AliFMDCorrector.h:216
 AliFMDCorrector.h:217
 AliFMDCorrector.h:218
 AliFMDCorrector.h:219
 AliFMDCorrector.h:220
 AliFMDCorrector.h:221
 AliFMDCorrector.h:222
 AliFMDCorrector.h:223
 AliFMDCorrector.h:224
 AliFMDCorrector.h:225
 AliFMDCorrector.h:226
 AliFMDCorrector.h:227
 AliFMDCorrector.h:228
 AliFMDCorrector.h:229
 AliFMDCorrector.h:230
 AliFMDCorrector.h:231
 AliFMDCorrector.h:232
 AliFMDCorrector.h:233
 AliFMDCorrector.h:234
 AliFMDCorrector.h:235
 AliFMDCorrector.h:236
 AliFMDCorrector.h:237
 AliFMDCorrector.h:238
 AliFMDCorrector.h:239
 AliFMDCorrector.h:240
 AliFMDCorrector.h:241
 AliFMDCorrector.h:242
 AliFMDCorrector.h:243
 AliFMDCorrector.h:244
 AliFMDCorrector.h:245
 AliFMDCorrector.h:246
 AliFMDCorrector.h:247
 AliFMDCorrector.h:248
 AliFMDCorrector.h:249
 AliFMDCorrector.h:250
 AliFMDCorrector.h:251
 AliFMDCorrector.h:252
 AliFMDCorrector.h:253
 AliFMDCorrector.h:254
 AliFMDCorrector.h:255
 AliFMDCorrector.h:256
 AliFMDCorrector.h:257
 AliFMDCorrector.h:258