ROOT logo
// 
// Calculate the corrections in the base regions
// 
#ifndef ALIBASEMCCORRECTIONS_H
#define ALIBASEMCCORRECTIONS_H
/**
 * @file   AliBaseMCCorrectionsTask.h
 * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
 * @date   Wed Mar 23 14:05:51 2011
 * 
 * @brief  
 * 
 * 
 * @ingroup pwglf_base_aod
 */
#include <AliBaseESDTask.h>
#include <AliESDFMD.h>
#include "AliFMDMCEventInspector.h"
#include <TH1I.h>
class AliBaseMCTrackDensity;
class AliCorrectionManagerBase;
class AliESDEvent;
class TH2D;
class TH1D;
class TList;


/** 
 * Calculate the corrections in the base regions
 * 
 * @par Inputs: 
 *   - AliESDEvent 
 *
 * @par Outputs: 
 *   - AliAODBaseMult 
 * 
 * @par Histograms 
 *   
 * @par Corrections used 
 * 
 * @ingroup pwglf_base_tasks
 * @ingroup pwglf_base_mc
 * @ingroup pwglf_base_aod
 * 
 */
class AliBaseMCCorrectionsTask : public AliBaseESDTask
{
public:
  /** 
   * Constructor 
   * 
   * @param name Name of task 
   * @param m    Manager 
   */
  AliBaseMCCorrectionsTask(const char* name,
			   AliCorrectionManagerBase* m);
  /** 
   * Constructor
   */
  AliBaseMCCorrectionsTask();
  /** 
   * @{ 
   * @name Interface methods 
   */
  /** 
   * Create output objects 
   * 
   * @return true on success
   */
  virtual Bool_t Book();
  /** 
   * Process each event 
   *
   * @param esd ESD event
   * 
   * @return true on success
   */  
  virtual Bool_t Event(AliESDEvent& esd);
  /** 
   * End of job
   * 
   * @return true on success
   */
  virtual Bool_t Finalize();
  /** 
   * @} 
   */
  /** 
   * Print this object 
   * 
   * @param option   Not used
   */
  void Print(Option_t* option="") const;

  /** 
   * Set the vertex axis to use
   * 
   * @param nBins Number of bins
   * @param vzMin Least @f$z@f$ coordinate of interation point
   * @param vzMax Largest @f$z@f$ coordinate of interation point
   */
  void SetVertexAxis(Int_t nBins, Double_t vzMin, Double_t vzMax=-1000000);
  /** 
   * Set the vertex axis to use
   * 
   * @param axis Axis
   */
  void SetVertexAxis(const TAxis& axis);
  /** 
   * Set the eta axis to use
   * 
   * @param nBins Number of bins
   * @param etaMin Least @f$\eta@f$ 
   * @param etaMax Largest @f$\eta@f$ 
   */
  void SetEtaAxis(Int_t nBins, Double_t etaMin, Double_t etaMax=-1000000);
  /** 
   * Set the eta axis to use
   * 
   * @param axis Axis
   */
  void SetEtaAxis(const TAxis& axis);
  /** 
   * Get a reference to the track density calculator 
   * 
   * @return Reference to the track density calculator 
   */
  virtual AliBaseMCTrackDensity& GetTrackDensity() = 0;
  /** 
   * Get a reference to the track density calculator 
   * 
   * @return Reference to the track density calculator 
   */
  virtual const AliBaseMCTrackDensity& GetTrackDensity() const = 0;
  /** 
   * Get a reference to the event inspector
   * 
   * @return Reference to the event inspector 
   */
  AliFMDEventInspector& GetEventInspector() { return fInspector; }
  /** 
   * Get a reference to the event inspector
   * 
   * @return Reference to the event inspector 
   */
  const AliFMDEventInspector& GetEventInspector() const { return fInspector;}
  /**
   * setter for the fUseESDVertexCoordinate flag 
   */
  void SetUseESDVertex(Bool_t use){ fUseESDVertex = use;}
  /**
   * setter for the fCalculateafterESDeventcuts flag 
   */
  void SetAfterEventSel(Bool_t use){ fAfterEventSel = use; }
protected: 
  /** 
   * Copy constructor 
   * 
   * @param o Object to copy from 
   */
  AliBaseMCCorrectionsTask(const AliBaseMCCorrectionsTask& o);
  /** 
   * Assignment operator 
   * 
   * @param o Object to assign from 
   * 
   * @return Reference to this object 
   */
  AliBaseMCCorrectionsTask& operator=(const AliBaseMCCorrectionsTask& o);
  /**
   * A vertex bin 
   * 
   */
  struct VtxBin : public TNamed
  {
    /** 
     * Constructor 
     */
    VtxBin();
    /** 
     * Constructor
     *  
     * @param low       Lower @f$v_z@f$ bound
     * @param high      Upper @f$v_z@f$ bound
     * @param etaAxis   @f$\eta@f$ axis to use 
     * @param nPhi      Number of @f$\varphi@f$ bins 
     */
    VtxBin(Double_t low, Double_t high, const TAxis& etaAxis, UShort_t nPhi);
    virtual ~VtxBin() {}
    /** 
     * Copy constructor 
     * 
     * @param o Object to copy from 
     */
    VtxBin(const VtxBin& o);
    /** 
     * Assignment operator 
     * 
     * @param o Object to assign from 
     * 
     * @return Reference to this object
     */
    VtxBin& operator=(const VtxBin& o);
    /** 
     * Get bin name
     * 
     * @param low       Lower @f$v_z@f$ bound
     * @param high      Upper @f$v_z@f$ bound
     * 
     * @return Bin name 
     */
    static const char* BinName(Double_t low, Double_t high);
    /** 
     * Declare output in passed list 
     * 
     * @param list List to put output in 
     */
    virtual TList* CreateOutputObjects(TList* list);
    TH2D*                  fPrimary;  // Cache or primary 
    TH1D*                  fCounts;   // Event count 

    ClassDef(VtxBin,1); // Vertex bin 
  };
  virtual TAxis* DefaultVertexAxis() const { return const_cast<TAxis*>(&fVtxAxis); }
  virtual TAxis* DefaultEtaAxis() const { return const_cast<TAxis*>(&fEtaAxis); }
  /** 
   * Create a vertex bin 
   * 
   * @param low      Low cut on @f$IP_{z}@f$
   * @param high     High cut on @f$IP_{z}@f$ 
   * 
   * @return Newly create vertex bin 
   */
  virtual VtxBin* CreateVtxBin(Double_t low, Double_t high) = 0;
  /** 
   * Process an ESD event 
   * 
   * @param esd ESD event 
   * @param mc  MC event 
   * @param bin Vertex bin
   * @param vz  @f$IP_{z}@f$ 
   * 
   * @return true on success 
   */
  virtual Bool_t ProcessESD(const AliESDEvent& esd, 
			    const AliMCEvent& mc, 
			    VtxBin& bin,
			    Double_t          vz) = 0;
  /** 
   * Create corrections objects and store them in passed list
   * 
   * @param results Output list 
   */
  virtual void CreateCorrections(TList* results) = 0;
  /** 
   * Do the final processing of a vertex bin 
   * 
   * @param bin       Vertex bin
   * @param iVz       Vertex bin number 
   * 
   * @return true on successd
   */
  virtual Bool_t FinalizeVtxBin(VtxBin*      bin, 
				UShort_t     iVz) = 0;
  /** 
   * Define our vertex bins 
   * 
   * @param list List to read or add binst from/to
   */
  void DefineBins(TList* list);

  AliFMDMCEventInspector fInspector; // Event inspector 

  TObjArray* fVtxBins;      // Vertex bins 
  TH1I*      fHEvents;      // All Events
  TH1I*      fHEventsTr;    // Histogram of events w/trigger
  TH1I*      fHEventsTrVtx; // Events w/trigger and vertex 
  TAxis      fVtxAxis;      // Vertex axis 
  TAxis      fEtaAxis;      // Eta axis 
  Bool_t     fUseESDVertex; // if true use Z vertex from ESD in calculations
  Bool_t     fAfterEventSel; //if true corr. be calc. after events selection

  ClassDef(AliBaseMCCorrectionsTask,1) // Base corrections class
};

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