ROOT logo
// 
// Calculate the corrections in the forward regions
// 
#ifndef ALIFORWARDMCCORRECTIONS_H
#define ALIFORWARDMCCORRECTIONS_H
/**
 * @file   AliForwardMCCorrectionsTask.h
 * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
 * @date   Wed Mar 23 14:05:51 2011
 * 
 * @brief  
 * 
 * 
 * @ingroup pwglf_forward_aod
 */
#include "AliBaseMCCorrectionsTask.h"
#include <AliESDFMD.h>
#include "AliFMDMCTrackDensity.h"
#include "AliForwardUtil.h"
#include <TH1I.h>
class AliESDEvent;
class AliFMDCorrSecondaryMap;
class TList;


/** 
 * Calculate the simulation-based corrections in the forward regions
 * 
 * @image html alice-int-2012-040-secondary_origin.png "Fraction of secondaries"
 *
 * @par Inputs: 
 *   - AliESDEvent (for steering only)
 *   - AliTrackReference
 *   - Kinematics 
 *   - Geometry 
 *
 * @par Outputs: 
 *   - AliFMDCorrSecondaryMap
 * 
 * @par Histograms 
 *   
 * @par Corrections used 
 *   - None
 * 
 * @ingroup pwglf_forward_tasks
 * @ingroup pwglf_forward_mc
 * @ingroup pwglf_forward_aod
 * 
 */
class AliForwardMCCorrectionsTask : public AliBaseMCCorrectionsTask
{
public:
  /** 
   * Constructor 
   * 
   * @param name Name of task 
   */
  AliForwardMCCorrectionsTask(const char* name);
  /** 
   * Constructor
   */
  AliForwardMCCorrectionsTask();
  /** 
   * @{ 
   * @name Interface methods 
   */
  /** 
   * Called before the event processing 
   * 
   * @return true on success
   */
  virtual Bool_t PreEvent();
  /** 
   * @} 
   */
  /** 
   * Print this object 
   * 
   * @param option   Not used
   */
  void Print(Option_t* option="") const;
  /** 
   * Get a reference to the track density calculator 
   * 
   * @return Reference to the track density calculator 
   */
  AliBaseMCTrackDensity& GetTrackDensity() { return fTrackDensity; }
  /** 
   * Get a reference to the track density calculator 
   * 
   * @return Reference to the track density calculator 
   */
  const AliBaseMCTrackDensity& GetTrackDensity() const { return fTrackDensity; }
protected: 
  /** 
   * Copy constructor 
   * 
   * @param o Object to copy from 
   */
  AliForwardMCCorrectionsTask(const AliForwardMCCorrectionsTask& o);
  /** 
   * Assignment operator 
   * 
   * @param o Object to assign from 
   * 
   * @return Reference to this object 
   */
  AliForwardMCCorrectionsTask& operator=(const AliForwardMCCorrectionsTask& o);
  /**
   * A vertex bin 
   * 
   */
  struct VtxBin : public AliBaseMCCorrectionsTask::VtxBin
  {
    /** 
     * 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 
     */
    VtxBin(Double_t low, Double_t high, const TAxis& etaAxis);
    /** 
     * 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);
    /** 
     * Declare output in passed list 
     * 
     * @param list List to put output in 
     */
    TList* CreateOutputObjects(TList* list);
    /** 
     * Calculate the background correction
     * 
     * @param hits      Summed hits (track-refs)
     * @param primary   Summed primaries 
     * 
     * @return Background correction
     */
    TH2D* MakeBg(const TH2D* hits, const TH2D* primary) const;
    /** 
     * End of job process 
     * 
     * @param o   List to add output to 
     * @param i   Input 
     * @param iVz Vertex bin
     * @param map Corrections map 
     */
    void Terminate(const TList*            i, 
		TList*                  o,
		UShort_t                iVz, 
		AliFMDCorrSecondaryMap* map);

    AliForwardUtil::Histos fHists;    // Cache of per-ring histograms
    ClassDef(VtxBin,2); // Vertex bin 
  };
  /** 
   * Create a vertex bin 
   * 
   * @param low     Low cut on @f$IP_{z}@f$ 
   * @param high    High cut on @f$IP_{z}@f$ 
   * 
   * @return Newly created vertex bin
   */
  AliBaseMCCorrectionsTask::VtxBin* CreateVtxBin(Double_t low, Double_t high);
  /** 
   * 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
   */
  Bool_t ProcessESD(const AliESDEvent& esd, const AliMCEvent& mc, 
		    AliBaseMCCorrectionsTask::VtxBin& bin,
		    Double_t vz);
  /** 
   * Create corrections objects and store them in passed list
   * 
   * @param results Output list 
   */
  virtual void CreateCorrections(TList* results);
  /** 
   * 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(AliBaseMCCorrectionsTask::VtxBin* bin, 
				UShort_t     iVz);


  AliFMDMCTrackDensity    fTrackDensity; // Get the track density 
  AliESDFMD               fESDFMD;       // Cache object
  AliFMDCorrSecondaryMap* fSecCorr;
  ClassDef(AliForwardMCCorrectionsTask,4) // Forward corrections class
};

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

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