ROOT logo
// Histogram and fit the energy loss distributions for the FMD
// 
// Wraps AliFMDEnergyFitter 
#ifndef ALIFMDENERGYFITTERTASK_H
#define ALIFMDENERGYFITTERTASK_H
/**
 * @file   AliFMDEnergyFitterTask.h
 * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
 * @date   Wed Mar 23 14:02:39 2011
 * 
 * @brief  
 * 
 * @ingroup pwglf_forward_eloss
 * 
 */
#include "AliBaseESDTask.h"
#include "AliFMDEventInspector.h"
#include "AliFMDEnergyFitter.h"
#include "AliFMDESDFixer.h"
class AliESDEvent;
class TH2D;
class TList;
class TTree;


/** 
 * Histogram and fit the energy loss distributions for the FMD
 * 
 * @par Inputs: 
 *   - AliESDEvent 
 *
 * @par Outputs: 
 *   - None
 * 
 * @par Histograms 
 *   
 * @par Corrections used 
 *   - None
 * 
 * @ingroup pwglf_forward_tasks
 * @ingroup pwglf_forward_eloss
 * 
 */
class AliFMDEnergyFitterTask : public AliBaseESDTask
{
public:
  /** 
   * Constructor 
   * 
   * @param name Name of task 
   */
  AliFMDEnergyFitterTask(const char* name);
  /** 
   * Constructor
   */
  AliFMDEnergyFitterTask();
  /** 
   * @{ 
   * @name Interface methods 
   */
  /** 
   * Called on master when setting up the train. 
   * 
   * @return Always true 
   */
  virtual Bool_t Setup();
  /** 
   * Book output objects. Derived class should define this to book
   * output objects on the processing output list @c fList before the
   * actual event processing.  This is called on the master and on
   * each slave.
   * 
   * If this member function returns false, the execution is stopped
   * with a fatal signal.
   *
   * @return true on success. 
   */
  virtual Bool_t Book();
  /** 
   * Called on first event _before_ reading corrections.  Here, the
   * user class can do additional checking to see if the some (more or
   * less) corrections are needed.
   * 
   * @param esd Event 
   */
  virtual void PreCorrections(const AliESDEvent* esd);
  /** 
   * Called after reading in the first event. Here we can setup stuff
   * depending on the conditions we're running under.
   * 
   * @return true on success.  If this returns false, then we turn the
   * task into a zombie and we do no more processing.
   */
  virtual Bool_t PreData(const TAxis& vertex, const TAxis& eta);
  /** 
   * Process each event 
   *
   * @param esd Event to analyse
   * @return true on success
   */  
  virtual Bool_t Event(AliESDEvent& esd);
  /** 
   * End of job
   * 
   * @return true on success
   */
  virtual Bool_t Finalize();
  /** 
   * @} 
   */
  /** 
   * Print information 
   * 
   * @param option Not used
   */
  void Print(Option_t* option="") const;
  /** 
   * @{ 
   * @name Access to sub-algorithms 
   */
  /**
   * Get reference to the EventInspector algorithm 
   * 
   * @return Reference to AliFMDEventInspector object 
   */
  AliFMDEventInspector& GetEventInspector() { return fEventInspector; }
  /**
   * Get reference to the EventInspector algorithm 
   * 
   * @return Reference to AliFMDEventInspector object 
   */
  const AliFMDEventInspector& GetEventInspector() const{return fEventInspector;}
  /**
   * Get reference to the ESDFixer algorithm 
   * 
   * @return Reference to AliFMDESDFixer object 
   */
  AliFMDESDFixer& GetESDFixer() { return fESDFixer; }
  /**
   * Get reference to the EnergyFitter algorithm 
   * 
   * @return Reference to AliFMDEnergyFitter object 
   */
  AliFMDEnergyFitter& GetEnergyFitter() { return fEnergyFitter; }
  /** 
   * @} 
   */
  /** 
   * @{ 
   * @name Settings 
   */
  /** 
   * Set the debug level 
   * 
   * @param dbg Debug level
   */
  void SetDebug(Int_t dbg);
  /** 
   * Set whether to only look at MB (INEL) data, so as to avoid 
   * bias from different trigger scalars. 
   * 
   * @param onlyMB if true, only analyse MB events
   */
  void SetOnlyMB(Bool_t onlyMB) { fOnlyMB = onlyMB; }
  /* @} */
  /** 
   * @{ 
   * @name Default axes 
   */
  /** 
   * Set the default eta axis to use in case we didn't get one from
   * the read-in corretions.  Override this if the sub class should go
   * on even without a valid eta axis from the corrections (e.g. QA
   * task)
   * 
   * @return null
   */
  virtual TAxis* DefaultEtaAxis() const;
  /** 
   * Set the default eta axis to use in case we didn't get one from
   * the read-in corretions.  Override this if the sub class should go
   * on even without a valid eta axis from the corrections (e.g. QA
   * task)
   * 
   * @return null
   */
  virtual TAxis* DefaultVertexAxis() const;
  /* @} */
protected: 
  /** 
   * Copy constructor 
   * 
   * @param o Object to copy from 
   */
  AliFMDEnergyFitterTask(const AliFMDEnergyFitterTask& o);
  /** 
   * Assignment operator 
   * 
   * @param o Object to assign from 
   * 
   * @return Reference to this object 
   */
  AliFMDEnergyFitterTask& operator=(const AliFMDEnergyFitterTask& o);

  virtual const char* DefaultConfig() const { return "elossFitConfig.C"; }

  AliFMDEventInspector fEventInspector; // Algorithm
  AliFMDESDFixer       fESDFixer;       // Algorithm
  AliFMDEnergyFitter   fEnergyFitter;   // Algorithm
  Bool_t               fOnlyMB;         // Only MB flag

  ClassDef(AliFMDEnergyFitterTask,4) // Forward multiplicity class
};

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

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