ROOT logo
//
// This class contains the secondary correction and the double hit
// correction used in low-flux events.
//
#ifndef ALIFMDCORRVERTEXBIAS_H
#define ALIFMDCORRVERTEXBIAS_H
/**
 * @file   AliFMDCorrVertexBias.h
 * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
 * @date   Wed Mar 23 14:01:56 2011
 * 
 * @brief  
 * 
 * 
 * @ingroup pwglf_forward_corr
 */
#include <TObject.h>
#include <TObjArray.h>
#include <TAxis.h>
class TH2D;

/**
 * This class contains the correction for the bias introduced by
 * different vertex bins
 *
 * The correction is given by 
 * @f[
 *   b_{v}(\eta,\varphi) = \frac{1/N_{t}\sum_i^{N_{tv}} N_{ch,i,primary}}{
 *                               1/N_{v}\sum_i^{N_{v}} N_{ch,i,primary}}
 * @f]
 *
 * where @f$N_{ch,i,primary}@f$ is the number of primary particles in
 * the given @f$(\eta,\varphi)@f$, and where the denominator sum runs
 * over all events with a vertex within the given vertex bin, and the
 * sum in the numerator runs over only events that have a valid
 * trigger and reconstructed vertex.  @f$ N_{t}@f$ is the number of
 * events with a valid trigger (but not necessarily a valid vertex).
 * The vertex information used @f$v@f$ is in all cases the MC truth
 * vertex
 *
 * These are generated from Monte-Carlo truth and ESD information. 
 *
 * @ingroup pwglf_forward_corr
 */
class AliFMDCorrVertexBias : public TObject 
{
public:
  /** 
   * Default constructor 
   */
  AliFMDCorrVertexBias();
  /** 
   * Copy constructor 
   * 
   * @param o Object to copy from 
   */
  AliFMDCorrVertexBias(const AliFMDCorrVertexBias& o);
  /**
   * Destructor 
   * 
   */
  virtual ~AliFMDCorrVertexBias();
  /** 
   * @{ 
   * @name Get corrections and parameters 
   */
  /** 
   * Assignment operator 
   * 
   * @param o Object to assign from 
   * 
   * @return Reference to this object 
   */
  AliFMDCorrVertexBias& operator=(const AliFMDCorrVertexBias& o);
  /** 
   * Get the vertex bias correction @f$ b_{v}@f$ 
   *
   * @param r  Ring type (I or O)
   * @param v  Primary interaction point @f$z@f$ coordinate
   * 
   * @return The correction @f$ b_{v}@f$ 
   */
  TH2D* GetCorrection(Char_t r, Double_t v) const;
  /** 
   * Get the vertex bias correction @f$ b_{v}@f$ 
   *
   * @param r  Ring type (I or O)
   * @param b  Bin corresponding to the primary interaction point 
   *           @f$z@f$ coordinate (1 based)
   * 
   * @return The correction @f$ b_{v}@f$ 
   */
  TH2D* GetCorrection(Char_t r, UShort_t b) const;
  /** 
   * Get the vertex axis used 
   * 
   * @return vertex axis 
   */
  const TAxis& GetVertexAxis() const { return fVertexAxis; }
  /* @} */

  /** 
   * @{ 
   * @name Set corrections and parameters 
   */
  /** 
   * Set the vertex bias correction @f$ b_{v}(\eta,\varphi)@f$.
   * Note, that the object takes ownership of the passed pointer.
   * 
   * @param r    Ring type (I or O)
   * @param v    Primary interaction point @f$z@f$ coordinate  
   * @param h    @f$ b_{v}(\eta,\varphi)@f$ 
   * 
   * @return true if operation succeeded 
   */
  Bool_t SetCorrection(Char_t r, Double_t v, TH2D* h);
  /** 
   * Set the vertex bias correction @f$ b_{v}(\eta,\varphi)@f$ 
   * Note, that the object takes ownership of the passed pointer.
   * 
   * @param r    Ring type (I or O)
   * @param b    Bin corresponding to the primary interaction point 
   *             @f$z@f$ coordinate  (1 based)
   * @param h    @f$ b_{v}(\eta,\varphi)@f$ 
   * 
   * @return true if operation succeeded 
   */
  Bool_t SetCorrection(Char_t r, UShort_t b, TH2D* h);
  /** 
   * Set the vertex axis to use 
   * 
   * @param axis Vertex axis 
   */
  void SetVertexAxis(const TAxis& axis);
  /** 
   * Set the vertex axis to use 
   * 
   * @param nBins Number of bins
   * @param min   Minimum	  
   * @param max   Maximum	  
   */
  void SetVertexAxis(Int_t nBins, Double_t min, Double_t max);
  /* @} */

  /** 
   * @{ 
   * @name Auxiliary member functions 
   */
  /** 
   * Declare this as a folder
   * 
   * @return Always true 
   */
  Bool_t IsFolder() const { return true; }
  /** 
   * Browse this object in the browser
   * 
   * @param b 
   */
  void Browse(TBrowser* b);
  /** 
   * Print this object 
   * 
   * @param option 
   */  
  void Print(Option_t* option="R") const; //*MENU*
  /* @} */
protected:
  /** 
   * Find the vertex bin that corresponds to the passed vertex 
   * 
   * @param vertex The interaction points @f$z@f$-coordinate 
   * 
   * @return Vertex bin in @f$[1,N_{\mbox{vertex}}]@f$ or negative if 
   * out of range 
   */
  Int_t FindVertexBin(Double_t vertex) const;
  /** 
   * Get the vertex array corresponding to the specified ring
   * 
   * @param v vertex bin (1 based)
   * 
   * @return Pointer to vertex array, or null in case of problems
   */
  TObjArray* GetVertexArray(UShort_t v) const;
  /** 
   * Get the vertex array corresponding to the specified ring
   * 
   * @param v vertex bin (1 based)
   * 
   * @return Pointer to vertex array, or newly created container 
   */
  TObjArray* GetOrMakeVertexArray(UShort_t v);

  TObjArray fVertexArray;    // Array of per-ring, per-vertex 2nd map
  TAxis     fVertexAxis;     // The vertex axis 
  ClassDef(AliFMDCorrVertexBias,1); // 
};

//____________________________________________________________________
inline void 
AliFMDCorrVertexBias::SetVertexAxis(Int_t nBins, Double_t min, Double_t max)
{
  fVertexAxis.Set(nBins, min, max);
}
//____________________________________________________________________
inline void 
AliFMDCorrVertexBias::SetVertexAxis(const TAxis& e)
{
  fVertexAxis.Set(e.GetNbins(), e.GetXmin(), e.GetXmax());
}
#endif
// Local Variables:
//  mode: C++
// End:
 AliFMDCorrVertexBias.h:1
 AliFMDCorrVertexBias.h:2
 AliFMDCorrVertexBias.h:3
 AliFMDCorrVertexBias.h:4
 AliFMDCorrVertexBias.h:5
 AliFMDCorrVertexBias.h:6
 AliFMDCorrVertexBias.h:7
 AliFMDCorrVertexBias.h:8
 AliFMDCorrVertexBias.h:9
 AliFMDCorrVertexBias.h:10
 AliFMDCorrVertexBias.h:11
 AliFMDCorrVertexBias.h:12
 AliFMDCorrVertexBias.h:13
 AliFMDCorrVertexBias.h:14
 AliFMDCorrVertexBias.h:15
 AliFMDCorrVertexBias.h:16
 AliFMDCorrVertexBias.h:17
 AliFMDCorrVertexBias.h:18
 AliFMDCorrVertexBias.h:19
 AliFMDCorrVertexBias.h:20
 AliFMDCorrVertexBias.h:21
 AliFMDCorrVertexBias.h:22
 AliFMDCorrVertexBias.h:23
 AliFMDCorrVertexBias.h:24
 AliFMDCorrVertexBias.h:25
 AliFMDCorrVertexBias.h:26
 AliFMDCorrVertexBias.h:27
 AliFMDCorrVertexBias.h:28
 AliFMDCorrVertexBias.h:29
 AliFMDCorrVertexBias.h:30
 AliFMDCorrVertexBias.h:31
 AliFMDCorrVertexBias.h:32
 AliFMDCorrVertexBias.h:33
 AliFMDCorrVertexBias.h:34
 AliFMDCorrVertexBias.h:35
 AliFMDCorrVertexBias.h:36
 AliFMDCorrVertexBias.h:37
 AliFMDCorrVertexBias.h:38
 AliFMDCorrVertexBias.h:39
 AliFMDCorrVertexBias.h:40
 AliFMDCorrVertexBias.h:41
 AliFMDCorrVertexBias.h:42
 AliFMDCorrVertexBias.h:43
 AliFMDCorrVertexBias.h:44
 AliFMDCorrVertexBias.h:45
 AliFMDCorrVertexBias.h:46
 AliFMDCorrVertexBias.h:47
 AliFMDCorrVertexBias.h:48
 AliFMDCorrVertexBias.h:49
 AliFMDCorrVertexBias.h:50
 AliFMDCorrVertexBias.h:51
 AliFMDCorrVertexBias.h:52
 AliFMDCorrVertexBias.h:53
 AliFMDCorrVertexBias.h:54
 AliFMDCorrVertexBias.h:55
 AliFMDCorrVertexBias.h:56
 AliFMDCorrVertexBias.h:57
 AliFMDCorrVertexBias.h:58
 AliFMDCorrVertexBias.h:59
 AliFMDCorrVertexBias.h:60
 AliFMDCorrVertexBias.h:61
 AliFMDCorrVertexBias.h:62
 AliFMDCorrVertexBias.h:63
 AliFMDCorrVertexBias.h:64
 AliFMDCorrVertexBias.h:65
 AliFMDCorrVertexBias.h:66
 AliFMDCorrVertexBias.h:67
 AliFMDCorrVertexBias.h:68
 AliFMDCorrVertexBias.h:69
 AliFMDCorrVertexBias.h:70
 AliFMDCorrVertexBias.h:71
 AliFMDCorrVertexBias.h:72
 AliFMDCorrVertexBias.h:73
 AliFMDCorrVertexBias.h:74
 AliFMDCorrVertexBias.h:75
 AliFMDCorrVertexBias.h:76
 AliFMDCorrVertexBias.h:77
 AliFMDCorrVertexBias.h:78
 AliFMDCorrVertexBias.h:79
 AliFMDCorrVertexBias.h:80
 AliFMDCorrVertexBias.h:81
 AliFMDCorrVertexBias.h:82
 AliFMDCorrVertexBias.h:83
 AliFMDCorrVertexBias.h:84
 AliFMDCorrVertexBias.h:85
 AliFMDCorrVertexBias.h:86
 AliFMDCorrVertexBias.h:87
 AliFMDCorrVertexBias.h:88
 AliFMDCorrVertexBias.h:89
 AliFMDCorrVertexBias.h:90
 AliFMDCorrVertexBias.h:91
 AliFMDCorrVertexBias.h:92
 AliFMDCorrVertexBias.h:93
 AliFMDCorrVertexBias.h:94
 AliFMDCorrVertexBias.h:95
 AliFMDCorrVertexBias.h:96
 AliFMDCorrVertexBias.h:97
 AliFMDCorrVertexBias.h:98
 AliFMDCorrVertexBias.h:99
 AliFMDCorrVertexBias.h:100
 AliFMDCorrVertexBias.h:101
 AliFMDCorrVertexBias.h:102
 AliFMDCorrVertexBias.h:103
 AliFMDCorrVertexBias.h:104
 AliFMDCorrVertexBias.h:105
 AliFMDCorrVertexBias.h:106
 AliFMDCorrVertexBias.h:107
 AliFMDCorrVertexBias.h:108
 AliFMDCorrVertexBias.h:109
 AliFMDCorrVertexBias.h:110
 AliFMDCorrVertexBias.h:111
 AliFMDCorrVertexBias.h:112
 AliFMDCorrVertexBias.h:113
 AliFMDCorrVertexBias.h:114
 AliFMDCorrVertexBias.h:115
 AliFMDCorrVertexBias.h:116
 AliFMDCorrVertexBias.h:117
 AliFMDCorrVertexBias.h:118
 AliFMDCorrVertexBias.h:119
 AliFMDCorrVertexBias.h:120
 AliFMDCorrVertexBias.h:121
 AliFMDCorrVertexBias.h:122
 AliFMDCorrVertexBias.h:123
 AliFMDCorrVertexBias.h:124
 AliFMDCorrVertexBias.h:125
 AliFMDCorrVertexBias.h:126
 AliFMDCorrVertexBias.h:127
 AliFMDCorrVertexBias.h:128
 AliFMDCorrVertexBias.h:129
 AliFMDCorrVertexBias.h:130
 AliFMDCorrVertexBias.h:131
 AliFMDCorrVertexBias.h:132
 AliFMDCorrVertexBias.h:133
 AliFMDCorrVertexBias.h:134
 AliFMDCorrVertexBias.h:135
 AliFMDCorrVertexBias.h:136
 AliFMDCorrVertexBias.h:137
 AliFMDCorrVertexBias.h:138
 AliFMDCorrVertexBias.h:139
 AliFMDCorrVertexBias.h:140
 AliFMDCorrVertexBias.h:141
 AliFMDCorrVertexBias.h:142
 AliFMDCorrVertexBias.h:143
 AliFMDCorrVertexBias.h:144
 AliFMDCorrVertexBias.h:145
 AliFMDCorrVertexBias.h:146
 AliFMDCorrVertexBias.h:147
 AliFMDCorrVertexBias.h:148
 AliFMDCorrVertexBias.h:149
 AliFMDCorrVertexBias.h:150
 AliFMDCorrVertexBias.h:151
 AliFMDCorrVertexBias.h:152
 AliFMDCorrVertexBias.h:153
 AliFMDCorrVertexBias.h:154
 AliFMDCorrVertexBias.h:155
 AliFMDCorrVertexBias.h:156
 AliFMDCorrVertexBias.h:157
 AliFMDCorrVertexBias.h:158
 AliFMDCorrVertexBias.h:159
 AliFMDCorrVertexBias.h:160
 AliFMDCorrVertexBias.h:161
 AliFMDCorrVertexBias.h:162
 AliFMDCorrVertexBias.h:163
 AliFMDCorrVertexBias.h:164
 AliFMDCorrVertexBias.h:165
 AliFMDCorrVertexBias.h:166
 AliFMDCorrVertexBias.h:167
 AliFMDCorrVertexBias.h:168
 AliFMDCorrVertexBias.h:169
 AliFMDCorrVertexBias.h:170
 AliFMDCorrVertexBias.h:171
 AliFMDCorrVertexBias.h:172
 AliFMDCorrVertexBias.h:173
 AliFMDCorrVertexBias.h:174
 AliFMDCorrVertexBias.h:175
 AliFMDCorrVertexBias.h:176
 AliFMDCorrVertexBias.h:177
 AliFMDCorrVertexBias.h:178
 AliFMDCorrVertexBias.h:179
 AliFMDCorrVertexBias.h:180
 AliFMDCorrVertexBias.h:181
 AliFMDCorrVertexBias.h:182
 AliFMDCorrVertexBias.h:183
 AliFMDCorrVertexBias.h:184
 AliFMDCorrVertexBias.h:185
 AliFMDCorrVertexBias.h:186
 AliFMDCorrVertexBias.h:187
 AliFMDCorrVertexBias.h:188
 AliFMDCorrVertexBias.h:189
 AliFMDCorrVertexBias.h:190
 AliFMDCorrVertexBias.h:191
 AliFMDCorrVertexBias.h:192
 AliFMDCorrVertexBias.h:193
 AliFMDCorrVertexBias.h:194
 AliFMDCorrVertexBias.h:195
 AliFMDCorrVertexBias.h:196
 AliFMDCorrVertexBias.h:197
 AliFMDCorrVertexBias.h:198
 AliFMDCorrVertexBias.h:199
 AliFMDCorrVertexBias.h:200
 AliFMDCorrVertexBias.h:201
 AliFMDCorrVertexBias.h:202
 AliFMDCorrVertexBias.h:203
 AliFMDCorrVertexBias.h:204
 AliFMDCorrVertexBias.h:205
 AliFMDCorrVertexBias.h:206
 AliFMDCorrVertexBias.h:207
 AliFMDCorrVertexBias.h:208
 AliFMDCorrVertexBias.h:209
 AliFMDCorrVertexBias.h:210
 AliFMDCorrVertexBias.h:211
 AliFMDCorrVertexBias.h:212
 AliFMDCorrVertexBias.h:213
 AliFMDCorrVertexBias.h:214
 AliFMDCorrVertexBias.h:215