ROOT logo
#ifndef ALIBASEAODTASK_H
#define ALIBASEAODTASK_H
#include <AliAnalysisTaskSE.h>
#include <TAxis.h>
class AliAODEvent;
class AliAODForwardMult;
class AliAODCentralMult;
class TList;

/**
 * Base class for reading in AOD stuff 
 * 
 */
class AliBaseAODTask : public AliAnalysisTaskSE
{
public:
  /** 
   * Constructor (for I/O - do not use)
   */
  AliBaseAODTask(); 
  /** 
   * Constructor 
   * 
   * @param name Name of task 
   * @param title Class name used in configuration script 
   */
  AliBaseAODTask(const char* name,
		 const char* title);
  /** 
   * Destructor
   */
  virtual ~AliBaseAODTask() {} 
  /** 
   * Configure this task via a macro 
   * 
   * @param macro Macro to configure va 
   * 
   * @return true on success, false otherwise
   */
  virtual Bool_t Configure(const char* macro="-default-");
  /** 
   * @{ 
   * @name Set parameters 
   */
  /** 
   * Set the vertex range to use 
   * 
   * @param min Minimum (in centermeter)
   * @param max Maximum (in centermeter)
   */  
  void SetIpZRange(Double_t min, Double_t max) { fMinIpZ=min; fMaxIpZ=max; }
  /** 
   * Set the trigger maskl 
   * 
   * @param mask Trigger mask
   */
  void SetTriggerMask(UShort_t mask);
  /** 
   * Set the trigger mask 
   * 
   * @param mask trigger mask 
   */
  void SetTriggerMask(const char* mask);
  /** 
   * Set the centrality bins to use. 
   * 
   * @code 
   *   UShort_t bins[] = { 0, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };
   *   task->SetCentralityBins(11, bins);
   * @endcode 
   * 
   * @param n     Number of bins (elements in @a bins minus 1)
   * @param bins  Bin limits 
   */
  void SetCentralityAxis(UShort_t n, Short_t* bins);
  /** 
   * Define a single centrality bin from @a low to @a high 
   * 
   * @param low  Lower bound 
   * @param high Upper bound
   */
  void SetCentralityAxis(Short_t low, Short_t high);
  /* @} */
  /** 
   * @{ 
   * @name Interface member functions 
   */
  /** 
   * Add this task to the manager and connect the outputs.  If @a
   * sumFile is null or the empty string, then the sum container is
   * stored in the default output file of the manager.  If @a resFile
   * is null or the empty string, then it is set to @a resFile if
   * defined, otherwise to the default output file of the manager.
   * 
   * @param sumFile Output file for sums
   * @param resFile Output file for sums
   * 
   * @return true on success 
   */
  virtual Bool_t Connect(const char* sumFile=0, const char* resFile=0);
  /** 
   * 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() = 0;
  /** 
   * 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() { return true; }
  /** 
   * Called before processing a single event - should not do anything
   * but clear data, etc.
   * 
   * @return true on success
   */
  virtual Bool_t PreEvent() { return true; } 
  /** 
   * Process a single event
   * 
   * @param aod Input event 
   * 
   * @return true on success 
   */
  virtual Bool_t Event(AliAODEvent& aod) = 0;
  /** 
   * Called after processing a single event - should not do anything
   * but clear data, etc.
   * 
   * @return true on success
   */
  virtual Bool_t PostEvent() { return true; } 
  /** 
   * Do the final analysis on the merged output. 
   * 
   * @return true on success
   */
  virtual Bool_t Finalize() = 0;
  /* @} */
     
  /** 
   * @{ 
   * @name Utilities 
   */
  /** 
   * Print information 
   * 
   * @param option Not used
   */
  void Print(Option_t* option="") const;
  /* @} */  
protected:
  /** 
   * Copyt constructor - not defined
   *
   * @param o Object to copy from 
   */
  AliBaseAODTask(const AliBaseAODTask& o); 
  /** 
   * Assignment operatoer - not defined
   *
   * @param o Object to assign from 
   *
   * @return reference to this object
   */
  AliBaseAODTask& operator=(const AliBaseAODTask& o); 
  /** @{ 
   *  @name Task interface 
   */
  /** 
   * Initialise on master - does nothing
   * 
   */
  virtual void   Init() {}
  /** 
   * Create output objects.  
   *
   * This is called once per slave process 
   */
  virtual void UserCreateOutputObjects();
  /** 
   * Process a single event 
   * 
   * @param option Not used
   */
  virtual void UserExec(Option_t* option);
  /** 
   * Called at end of event processing.
   *
   * This is called once in the master 
   * 
   * @param option Not used 
   */
  virtual void Terminate(Option_t* option);
  /* @} */
  /** 
   * Get the forward object from the AOD 
   * 
   * @param aod AOD event 
   * @param mc   If true, for MC 
   * @param verb If truem be verbose
   * 
   * @return Forward object or null
   */
  AliAODForwardMult* GetForward(const AliAODEvent& aod, 
				Bool_t mc=false, 
				Bool_t verb=true);
  /** 
   * Get the central object from the AOD 
   * 
   * @param aod  AOD event 
   * @param mc   If true, for MC 
   * @param verb If truem be verbose
   * 
   * @return Central object or null
   */
  AliAODCentralMult* GetCentral(const AliAODEvent& aod, 
				Bool_t mc=false, 
				Bool_t verb=true);
  /** 
   * Get the histogram of primary particles 
   * 
   * @param aod AOD event 
   * 
   * @return Pointer to primary particles, or null
   */
  TH2D* GetPrimary(const AliAODEvent& aod);
  /** 
   * Store information about the job on output 
   * 
   * @param forward Forward object
   */
  virtual void StoreInformation(AliAODForwardMult& forward);
  /** 
   * Check if the event corresponds to the selected trigger(s),
   * vertex, and centrality.  Derived classes can overload this to
   * enable event processing - even if the event is not within cuts.
   * 
   * @param forward Forward object
   * 
   * @return true if the event is within the cuts. 
   */
  virtual Bool_t CheckEvent(const AliAODForwardMult& forward);
  /** 
   * Check if we have centrality bins defined
   * 
   * @return true if we have one or more centrality bins 
   */
  Bool_t HasCentrality() const 
  { 
    return (fCentAxis.GetNbins() >= 1 && 
	    fCentAxis.GetXbins() && 
	    fCentAxis.GetXbins()->GetArray()); 
  }
  /** 
   * Get the name of the default configuration script to use.
   * Sub-classes can override this to give another default
   * configuration script.  Note, it should problably only return the
   * base name (not full path) of the script.
   * 
   * @return Name of the configuration script to use. 
   */
  virtual const char* DefaultConfig() const { return "dNdetaConfig.C"; }

  UInt_t   fTriggerMask;   // Trigger mask 
  Double_t fMinIpZ;        // Least z--coordiante of interaction point
  Double_t fMaxIpZ;        // Largest z--coordiante of interaction point
  TAxis    fCentAxis;      // Centrality axis 
  TH1I*    fTriggers;      // Histogram of triggers
  TH1I*    fEventStatus;   // Histogram of event selection 
  TH1D*    fVertex;        // Vertex distribution of all events 
  TH1D*    fCent;          // Centrality distribution of all events
  TH1D*    fAccVertex;     // Vertex distribution of accepted events 
  TH1D*    fAccCent;       // Centrality distribution of accepted events
  Bool_t   fFirstEvent;    // Information stored or not 
  Bool_t   fCloneList;     // Wether to clone sum list for results
  TList*   fSums;          // Output list of sums
  TList*   fResults;       // Output list of results

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