ROOT logo
//
// Calculate the flow in the forward regions using the Q cumulants method
//
#ifndef ALIFORWARDMCFLOWTASKQC_H
#define ALIFORWARDMCFLOWTASKQC_H
/**
 * @file   AliForwardMCFlowTaskQC.h
 * @author Alexander Hansen alexander.hansen@cern.ch
 * 
 * @brief  
 * 
 * @ingroup pwglf_forward_flow
 */
#include "AliForwardFlowTaskQC.h"
#include "AliForwardFlowWeights.h"
class TGraph;
class AliAODMCHeader;

/**
 * Calculate the flow in the forward regions using the Q cumulants method
 *
 * @par Inputs:
 *   - AliAODEvent
 *
 * Outputs:
 *   - forward_flow.root
 *
 * @ingroup pwglf_forward_tasks_flow
 * @ingroup pwglf_forward_flow
 *
 */
class AliForwardMCFlowTaskQC : public AliForwardFlowTaskQC
{
public:
  /**
   * Constructor
   */
  AliForwardMCFlowTaskQC();
  /**
   * Constructor
   *
   * @param name Name of task
   */
  AliForwardMCFlowTaskQC(const char* name);
  /**
   * Destructor 
   */
  virtual ~AliForwardMCFlowTaskQC() {}
  /**
   * Set use parametrization from impact parameter for centrality
   *
   * @param use Use impact par
   */
  void SetUseImpactParameter(Bool_t use = kTRUE) { fUseImpactPar = use; }
  /**
   * Set to get vertex from MC header
   *
   * @param use Get from MC header
   */
  void SetUseMCHeaderVertex(Bool_t use = kTRUE) { fUseMCVertex = use; }
  /**
   * Add flow to MC particles
   */
  void SetUseFlowWeights(Bool_t use = kTRUE) { fUseFlowWeights = use; }
   
protected:
  /**
   * Copy constructor
   *
   * @param o Object to copy from
   */
  AliForwardMCFlowTaskQC(const AliForwardMCFlowTaskQC& o);
  /** 
   * Assignment operator 
   * 
   * @param o Object to assing from 
   *
   * @return Reference to this object 
   */
  AliForwardMCFlowTaskQC& operator=(const AliForwardMCFlowTaskQC& o);
  /**
   * Initiate vertex bin objects
   */
  void InitVertexBins();
  /**
   * Initiate diagnostics histograms
   */
  void InitHists();
  /**
   * Analyze event
   *
   * @return true on success 
   */
  Bool_t Analyze();
  /**
   * Finalize analysis
   */
  void Finalize();
    /**
   * Check AODevent object for trigger, vertex and centrality
   * uses aod header if object is null
   * returns true if event is OK
   *
   * @param aodfm AliAODForwardMult object
   * 
   * @return Bool_t 
   */
  virtual Bool_t CheckEvent(const AliAODForwardMult* aodfm);
  /**
   * Check trigger from AODForwardMult object
   * returns true if B trigger is present
   *
   * @param aodfm AliAODForwardMultObject
   * 
   * @return Bool_t 
   */
  virtual Bool_t CheckTrigger(const AliAODForwardMult* aodfm) const;
  /**
   * Check for centrality in AliAODForwardMult object, 
   * if present return true - also sets fCent value
   * can be used to get centrality from impact parameter
   *
   * @param aodfm AliAODForwardMultObject
   * 
   * @return Bool_t 
   */
  virtual Bool_t GetCentrality(const AliAODForwardMult* aodfm);
  /**
   * Check for vertex in MCHeader
   * returns true if in range of fVtxAXis, also sets fVtx value
   *
   * @param aodfm Not used
   * 
   * @return Bool_t 
   */
  virtual Bool_t GetVertex(const AliAODForwardMult* aodfm);
  /**
   * Loop over AliAODMCParticle branch object and fill d^2N/detadphi histograms
   * add flow if arguments are set
   * 
   * @return true on success
   */
  Bool_t FillMCHist();
  /**
   * Get centrality form MC impact parameter
   *
   * @return Centrality
   */
  Double_t GetCentFromB() const;
  
  TList                 fBinsForwardTR;   //  List with FMDTR VertexBin objects
  TList                 fBinsCentralTR;   //  List with SPDTR VertexBin objects
  TList                 fBinsMC;          //  List with MC VertexBin objects
  AliAODMCHeader*       fAODMCHeader;     //  MC header object
  TH2D                  fHistdNdedpMC;    //  d^2N/detadphi MC particles histogram
  TH2D*                 fHistFMDMCCorr;   //  Diagnostics for mult. corr. between FMD and MC
  TH2D*                 fHistSPDMCCorr;   //  Diagnostics for mult. corr. between SPD and MC
  AliForwardFlowWeights* fWeights;         //  Flow after burner 
  TGraph*               fImpactParToCent; //  Parametrization of b to centrality
  Bool_t                fUseImpactPar;    //  Flag to use impact parameter for cent
  Bool_t                fUseMCVertex;     //  Get vertex from MC header
  Bool_t                fUseFlowWeights;  //  Add flow

  ClassDef(AliForwardMCFlowTaskQC, 6); // FMD MC analysis task 
};
 
#endif
// Local Variables:
//   mode: C++ 
// End:
 AliForwardMCFlowTaskQC.h:1
 AliForwardMCFlowTaskQC.h:2
 AliForwardMCFlowTaskQC.h:3
 AliForwardMCFlowTaskQC.h:4
 AliForwardMCFlowTaskQC.h:5
 AliForwardMCFlowTaskQC.h:6
 AliForwardMCFlowTaskQC.h:7
 AliForwardMCFlowTaskQC.h:8
 AliForwardMCFlowTaskQC.h:9
 AliForwardMCFlowTaskQC.h:10
 AliForwardMCFlowTaskQC.h:11
 AliForwardMCFlowTaskQC.h:12
 AliForwardMCFlowTaskQC.h:13
 AliForwardMCFlowTaskQC.h:14
 AliForwardMCFlowTaskQC.h:15
 AliForwardMCFlowTaskQC.h:16
 AliForwardMCFlowTaskQC.h:17
 AliForwardMCFlowTaskQC.h:18
 AliForwardMCFlowTaskQC.h:19
 AliForwardMCFlowTaskQC.h:20
 AliForwardMCFlowTaskQC.h:21
 AliForwardMCFlowTaskQC.h:22
 AliForwardMCFlowTaskQC.h:23
 AliForwardMCFlowTaskQC.h:24
 AliForwardMCFlowTaskQC.h:25
 AliForwardMCFlowTaskQC.h:26
 AliForwardMCFlowTaskQC.h:27
 AliForwardMCFlowTaskQC.h:28
 AliForwardMCFlowTaskQC.h:29
 AliForwardMCFlowTaskQC.h:30
 AliForwardMCFlowTaskQC.h:31
 AliForwardMCFlowTaskQC.h:32
 AliForwardMCFlowTaskQC.h:33
 AliForwardMCFlowTaskQC.h:34
 AliForwardMCFlowTaskQC.h:35
 AliForwardMCFlowTaskQC.h:36
 AliForwardMCFlowTaskQC.h:37
 AliForwardMCFlowTaskQC.h:38
 AliForwardMCFlowTaskQC.h:39
 AliForwardMCFlowTaskQC.h:40
 AliForwardMCFlowTaskQC.h:41
 AliForwardMCFlowTaskQC.h:42
 AliForwardMCFlowTaskQC.h:43
 AliForwardMCFlowTaskQC.h:44
 AliForwardMCFlowTaskQC.h:45
 AliForwardMCFlowTaskQC.h:46
 AliForwardMCFlowTaskQC.h:47
 AliForwardMCFlowTaskQC.h:48
 AliForwardMCFlowTaskQC.h:49
 AliForwardMCFlowTaskQC.h:50
 AliForwardMCFlowTaskQC.h:51
 AliForwardMCFlowTaskQC.h:52
 AliForwardMCFlowTaskQC.h:53
 AliForwardMCFlowTaskQC.h:54
 AliForwardMCFlowTaskQC.h:55
 AliForwardMCFlowTaskQC.h:56
 AliForwardMCFlowTaskQC.h:57
 AliForwardMCFlowTaskQC.h:58
 AliForwardMCFlowTaskQC.h:59
 AliForwardMCFlowTaskQC.h:60
 AliForwardMCFlowTaskQC.h:61
 AliForwardMCFlowTaskQC.h:62
 AliForwardMCFlowTaskQC.h:63
 AliForwardMCFlowTaskQC.h:64
 AliForwardMCFlowTaskQC.h:65
 AliForwardMCFlowTaskQC.h:66
 AliForwardMCFlowTaskQC.h:67
 AliForwardMCFlowTaskQC.h:68
 AliForwardMCFlowTaskQC.h:69
 AliForwardMCFlowTaskQC.h:70
 AliForwardMCFlowTaskQC.h:71
 AliForwardMCFlowTaskQC.h:72
 AliForwardMCFlowTaskQC.h:73
 AliForwardMCFlowTaskQC.h:74
 AliForwardMCFlowTaskQC.h:75
 AliForwardMCFlowTaskQC.h:76
 AliForwardMCFlowTaskQC.h:77
 AliForwardMCFlowTaskQC.h:78
 AliForwardMCFlowTaskQC.h:79
 AliForwardMCFlowTaskQC.h:80
 AliForwardMCFlowTaskQC.h:81
 AliForwardMCFlowTaskQC.h:82
 AliForwardMCFlowTaskQC.h:83
 AliForwardMCFlowTaskQC.h:84
 AliForwardMCFlowTaskQC.h:85
 AliForwardMCFlowTaskQC.h:86
 AliForwardMCFlowTaskQC.h:87
 AliForwardMCFlowTaskQC.h:88
 AliForwardMCFlowTaskQC.h:89
 AliForwardMCFlowTaskQC.h:90
 AliForwardMCFlowTaskQC.h:91
 AliForwardMCFlowTaskQC.h:92
 AliForwardMCFlowTaskQC.h:93
 AliForwardMCFlowTaskQC.h:94
 AliForwardMCFlowTaskQC.h:95
 AliForwardMCFlowTaskQC.h:96
 AliForwardMCFlowTaskQC.h:97
 AliForwardMCFlowTaskQC.h:98
 AliForwardMCFlowTaskQC.h:99
 AliForwardMCFlowTaskQC.h:100
 AliForwardMCFlowTaskQC.h:101
 AliForwardMCFlowTaskQC.h:102
 AliForwardMCFlowTaskQC.h:103
 AliForwardMCFlowTaskQC.h:104
 AliForwardMCFlowTaskQC.h:105
 AliForwardMCFlowTaskQC.h:106
 AliForwardMCFlowTaskQC.h:107
 AliForwardMCFlowTaskQC.h:108
 AliForwardMCFlowTaskQC.h:109
 AliForwardMCFlowTaskQC.h:110
 AliForwardMCFlowTaskQC.h:111
 AliForwardMCFlowTaskQC.h:112
 AliForwardMCFlowTaskQC.h:113
 AliForwardMCFlowTaskQC.h:114
 AliForwardMCFlowTaskQC.h:115
 AliForwardMCFlowTaskQC.h:116
 AliForwardMCFlowTaskQC.h:117
 AliForwardMCFlowTaskQC.h:118
 AliForwardMCFlowTaskQC.h:119
 AliForwardMCFlowTaskQC.h:120
 AliForwardMCFlowTaskQC.h:121
 AliForwardMCFlowTaskQC.h:122
 AliForwardMCFlowTaskQC.h:123
 AliForwardMCFlowTaskQC.h:124
 AliForwardMCFlowTaskQC.h:125
 AliForwardMCFlowTaskQC.h:126
 AliForwardMCFlowTaskQC.h:127
 AliForwardMCFlowTaskQC.h:128
 AliForwardMCFlowTaskQC.h:129
 AliForwardMCFlowTaskQC.h:130
 AliForwardMCFlowTaskQC.h:131
 AliForwardMCFlowTaskQC.h:132
 AliForwardMCFlowTaskQC.h:133
 AliForwardMCFlowTaskQC.h:134
 AliForwardMCFlowTaskQC.h:135
 AliForwardMCFlowTaskQC.h:136
 AliForwardMCFlowTaskQC.h:137
 AliForwardMCFlowTaskQC.h:138
 AliForwardMCFlowTaskQC.h:139
 AliForwardMCFlowTaskQC.h:140
 AliForwardMCFlowTaskQC.h:141
 AliForwardMCFlowTaskQC.h:142
 AliForwardMCFlowTaskQC.h:143
 AliForwardMCFlowTaskQC.h:144
 AliForwardMCFlowTaskQC.h:145
 AliForwardMCFlowTaskQC.h:146
 AliForwardMCFlowTaskQC.h:147
 AliForwardMCFlowTaskQC.h:148
 AliForwardMCFlowTaskQC.h:149
 AliForwardMCFlowTaskQC.h:150
 AliForwardMCFlowTaskQC.h:151
 AliForwardMCFlowTaskQC.h:152
 AliForwardMCFlowTaskQC.h:153
 AliForwardMCFlowTaskQC.h:154
 AliForwardMCFlowTaskQC.h:155
 AliForwardMCFlowTaskQC.h:156
 AliForwardMCFlowTaskQC.h:157
 AliForwardMCFlowTaskQC.h:158
 AliForwardMCFlowTaskQC.h:159
 AliForwardMCFlowTaskQC.h:160
 AliForwardMCFlowTaskQC.h:161
 AliForwardMCFlowTaskQC.h:162
 AliForwardMCFlowTaskQC.h:163
 AliForwardMCFlowTaskQC.h:164
 AliForwardMCFlowTaskQC.h:165
 AliForwardMCFlowTaskQC.h:166
 AliForwardMCFlowTaskQC.h:167
 AliForwardMCFlowTaskQC.h:168
 AliForwardMCFlowTaskQC.h:169
 AliForwardMCFlowTaskQC.h:170