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

/**
 * This class contains the secondary correction.
 *
 * The secondary correction is given by 
 * @f[
 *   c_{r,v}(\eta,\varphi) = 
 *      \frac{\sum_i N_{ch,i,v,\mbox{primary}}(\eta,\varphi)}{
 *            \sum_i N_{ch,i,r,v,\mbox{FMD}}(\eta,\varphi)}
 * @f]
 * where @f$N_{ch,i,v,\mbox{primary}}(\eta,\varphi)@f$ is the 
 * is the number of primary charged particles that fall within
 * the @f$(\eta,\varphi)@f$ bin in event @f$i@f$ with vertex @f$v@f$, 
 * and is the total (primary <i>and</i> secondary) charged particles 
 * that hit ring @f$r@f$ within @f$(\eta,\varphi)@f$ bin in event 
 * @f$i@f$ with vertex @f$v@f$. 
 *
 * These are generated from Monte-Carlo truth information. 
 *
 * @ingroup pwglf_forward_corr
 */
class AliFMDCorrSecondaryMap : public TObject 
{
public:
  /** 
   * Default constructor 
   */
  AliFMDCorrSecondaryMap();
  /** 
   * Copy constructor 
   * 
   * @param o Object to copy from 
   */
  AliFMDCorrSecondaryMap(const AliFMDCorrSecondaryMap& o);
  /**
   * Destructor 
   * 
   */
  virtual ~AliFMDCorrSecondaryMap();
  /** 
   * @{ 
   * @name Get corrections and parameters 
   */
  /** 
   * Assignment operator 
   * 
   * @param o Object to assign from 
   * 
   * @return Reference to this object 
   */
  AliFMDCorrSecondaryMap& operator=(const AliFMDCorrSecondaryMap& o);
  /** 
   * Get the secondary correction @f$ c_{r,v}@f$ 
   *
   * @param d  Detector number (1-3)
   * @param r  Ring identifier (I or O)
   * @param v  Primary interaction point @f$z@f$ coordinate
   * 
   * @return The correction @f$ c_{r,v}@f$ 
   */
  TH2D* GetCorrection(UShort_t d, Char_t r, Double_t v) const;
  /** 
   * Get the secondary correction @f$ c_{r,v}@f$ 
   *
   * @param d  Detector number (1-3)
   * @param r  Ring identifier (I or O)
   * @param b  Bin corresponding to the primary interaction point 
   *           @f$z@f$ coordinate (1 based)
   * 
   * @return The correction @f$ c_{r,v}@f$ 
   */
  TH2D* GetCorrection(UShort_t d, Char_t r, UShort_t b) const;
  /** 
   * Get the vertex axis used 
   * 
   * @return vertex axis 
   */
  const TAxis& GetVertexAxis() const { return fVertexAxis; }
  /** 
   * Get the eta axis used 
   * 
   * @return eta axis 
   */
  const TAxis& GetEtaAxis() const { return fEtaAxis; }
  /* @} */

  /** 
   * @{ 
   * @name Set corrections and parameters 
   */
  /** 
   * Set the secondary map correction @f$ c_{r,v}(\eta,\varphi)@f$.
   * Note, that the object takes ownership of the passed pointer.
   * 
   * @param d    Detector number (1-3)
   * @param r    Ring identifier (I or O)
   * @param v    Primary interaction point @f$z@f$ coordinate  
   * @param h    @f$ c_{r,v}(\eta,\varphi)@f$ 
   * 
   * @return true if operation succeeded 
   */
  Bool_t SetCorrection(UShort_t d, Char_t r, Double_t v, TH2D* h);
  /** 
   * Set the secondary map correction @f$ c_{r,v}(\eta,\varphi)@f$ 
   * Note, that the object takes ownership of the passed pointer.
   * 
   * @param d    Detector number (1-3)
   * @param r    Ring identifier (I or O)
   * @param b    Bin corresponding to the primary interaction point 
   *             @f$z@f$ coordinate  (1 based)
   * @param h    @f$ c_{r,v}(\eta,\varphi)@f$ 
   * 
   * @return true if operation succeeded 
   */
  Bool_t SetCorrection(UShort_t d, 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);
  /** 
   * Set the eta axis to use 
   * 
   * @param axis Eta axis 
   */
  void SetEtaAxis(const TAxis& axis);
  /** 
   * Set the eta axis to use 
   * 
   * @param nBins Number of bins
   * @param min   Minimum	  
   * @param max   Maximum	  
   */
  void SetEtaAxis(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 index corresponding to the given ring 
   * 
   * @param d Detector
   * @param r Ring 
   * 
   * @return Index (0 based) or negative in case of errors
   */
  Int_t GetRingIndex(UShort_t d, Char_t r) const;
  /** 
   * Get the ring array corresponding to the specified ring
   * 
   * @param d Detector 
   * @param r Ring 
   * 
   * @return Pointer to ring array, or null in case of problems
   */
  TObjArray* GetRingArray(UShort_t d, Char_t r) const;
  /** 
   * Get the ring array corresponding to the specified ring
   * 
   * @param d Detector 
   * @param r Ring 
   * 
   * @return Pointer to ring array, or newly created container 
   */
  TObjArray* GetOrMakeRingArray(UShort_t d, Char_t r);

  TObjArray fRingArray;      // Array of per-ring, per-vertex 2nd map
  TAxis     fVertexAxis;     // The vertex axis 
  TAxis     fEtaAxis;        // The eta axis
  ClassDef(AliFMDCorrSecondaryMap,1); // 
};

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