ROOT logo
//
// This class contains the acceptance correction due to dead channels
//
//
#ifndef ALIFMDCORRACCEPTANCE_H
#define ALIFMDCORRACCEPTANCE_H
/**
 * @file   AliFMDCorrAcceptance.h
 * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
 * @date   Wed Mar 23 14:00:40 2011
 * 
 * @brief  
 * 
 * @ingroup pwglf_forward_corr
 * 
 */
#include <TObject.h>
#include <TObjArray.h>
#include <TAxis.h>
class TH2D;
class TH1D;

/**
 * This class contains the acceptance correction due to dead channels
 *
 * These are generated from the on-line dead channel calculations 
 *
 * @ingroup pwglf_forward_corr
 */
class AliFMDCorrAcceptance : public TObject 
{
public:
  /** 
   * Default constructor 
   */
  AliFMDCorrAcceptance();
  /** 
   * Copy constructor 
   * 
   * @param o Object to copy from 
   */
  AliFMDCorrAcceptance(const AliFMDCorrAcceptance& o);
  /**
   * Destructor 
   * 
   */
  virtual ~AliFMDCorrAcceptance();
  /** 
   * @{ 
   * @name Get corrections and parameters 
   */
  /** 
   * Assignment operator 
   * 
   * @param o Object to assign from 
   * 
   * @return Reference to this object 
   */
  AliFMDCorrAcceptance& operator=(const AliFMDCorrAcceptance& o);
  /** 
   * Get the acceptance correction @f$ a_{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$ a_{r,v}@f$ 
   */
  TH2D* GetCorrection(UShort_t d, Char_t r, Double_t v) const;
  /** 
   * Get the acceptance correction @f$ a_{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$ a_{r,v}@f$ 
   */
  TH2D* GetCorrection(UShort_t d, Char_t r, UShort_t b) const;
  /** 
   * Get the phi acceptance 
   * 
   * @param d Detector
   * @param r ring 
   * @param v vertex 
   * 
   * @return 
   */  
  TH1D* GetPhiAcceptance(UShort_t d, Char_t r, Double_t v) const;
  /** 
   * Get the phi acceptance 
   * 
   * @param d Detector 
   * @param r ring 
   * @param b vertex bin number 
   * 
   * @return 
   */  
  TH1D* GetPhiAcceptance(UShort_t d, Char_t r, UShort_t b) const;
  /** 
   * Get the vertex axis used 
   * 
   * @return vertex axis 
   */
  const TAxis& GetVertexAxis() const { return fVertexAxis; }
  /** 
   * @return true if the overflow bins along eta are set to the ratio
   * of OK strips to all strips for a given eta bin.
   */
  Bool_t HasOverflow() const { return fHasOverflow; }
  /* @} */

  /** 
   * @{ 
   * @name Set corrections and parameters 
   */
  /** 
   * Set the acceptance correction @f$ a_{r,v}(\eta)@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$ a_{r,v}(\eta)@f$ 
   * 
   * @return true if operation succeeded 
   */
  Bool_t SetCorrection(UShort_t d, Char_t r, Double_t v, TH2D* h);
  /** 
   * Set the acceptance correction @f$ a_{r,v}(\eta)@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$ a_{r,v}(\eta)@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 that we have (or not) the overflow bin present 
   * 
   * @param present If true, assume the overflow bins are filled
   */
  void SetHasOverflow(Bool_t present=true) { fHasOverflow = present; }
  /* @} */

  /** 
   * @{ 
   * @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*
  void ls(Option_t* option="") const; //*MENU*
  // void Draw(Option_t* option="");
  // void SaveAs(const Char_t* filename, Option_t* option="colz") const;
  /* @} */
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 m Array 
   * @param d Detector 
   * @param r Ring 
   * 
   * @return Pointer to ring array, or null in case of problems
   */
  TObjArray* GetRingArray(const TObjArray& m, UShort_t d, Char_t r) const;
  /** 
   * Get the ring array corresponding to the specified ring
   * 
   * @param m Array 
   * @param d Detector 
   * @param r Ring 
   * 
   * @return Pointer to ring array, or newly created container 
   */
  TObjArray* GetOrMakeRingArray(TObjArray& m, UShort_t d, Char_t r) const;
  TObject* GetObject(const TObjArray& m, UShort_t d, 
		     Char_t r, UShort_t b) const;

  void FillCache() const;

  TObjArray fRingArray;      // Array of per-ring, per-vertex 2d map
  mutable TObjArray* fCache;  //! Array of per-ring, per-vertex 1d factors
  TAxis     fVertexAxis;     // The vertex axis 
  Bool_t    fHasOverflow;    // Whether we have the overflow bin set
  ClassDef(AliFMDCorrAcceptance,2); // Acceptance correction due to dead areas
};

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