ROOT logo
// 
// Base class for classes that calculate the multiplicity in the
// SPD clusters event-by-event
// 
#ifndef ALICENTRALMULTIPLICITYTASK_H
#define ALICENTRALMULTIPLICITYTASK_H
/**
 * @file   AliCentralMultiplicityTask.h
 * @author Hans Hjersing Dalsgaard
 * @date   Wed Mar 23 14:00:03 2011
 * 
 * @brief  
 * 
 * @ingroup pwglf_forward_aod
 * 
 */
#include "AliBaseESDTask.h"
#include "AliFMDEventInspector.h"
#include "AliAODCentralMult.h"
class AliCentralCorrectionManager;
class AliESDEvent;
class AliMultiplicity;
class TH2D;
class TList;
class TTree;
class TObjArray;

/** 
 * Class that calculates the multiplicity in the
 * central region event-by-event
 * 
 * @par Inputs: 
 *   - AliESDEvent 
 *
 * @par Outputs: 
 *   - AliAODCentralMult 
 * 
 * @par Histograms 
 *   
 * @par Corrections used 
 * 
 * @ingroup pwglf_forward_tasks
 * @ingroup pwglf_forward_aod
 * 
 */
class AliCentralMultiplicityTask : public AliBaseESDTask
{
public:
  /** 
   * @{ 
   * @name Interface methods 
   */
   /** 
   * Constructor 
   * 
   * @param name Name of task 
   */
  AliCentralMultiplicityTask(const char* name); 
  /** 
   * Constructor 
   *
   * Reserved for ROOT's I/O system - do not use
   */
  AliCentralMultiplicityTask();
  /** 
   * Create output objects 
   * 
   * @return true on success
   */
  virtual Bool_t Book();
  /** 
   * Creat output objects in tree 
   * 
   * @param ah Handler 
   */
  virtual void CreateBranches(AliAODHandler* ah);
  /** 
   * Called just before first event
   * 
   * @param v Vertex axis 
   * @param e @f$\eta@f$ axis
   * 
   * @return true on success
   */
  virtual Bool_t PreData(const TAxis& v, const TAxis& e);
  /** 
   * Called before event
   * 
   * @return true on success
   */
  virtual Bool_t PreEvent();
  /** 
   * 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 information 
   * 
   * @param option Not used
   */
  virtual void Print(Option_t* option="") const;
  /** 
   * Set whether to use the secondary corrections 
   * 
   * @param use Whether to use secondary corrections 
   */
  virtual void SetUseSecondary(Bool_t use) { fUseSecondary = use; }
  /** 
   * Set whether to use the acceptance corrections 
   * 
   * @param use Whether to use acceptance corrections 
   */
  virtual void SetUseAcceptance(Bool_t use) { fUseAcceptance = use; }
  /** 
   * Set whether to make diagnostics or not
   * 
   * @param use If true, store some extra diagnostic histograms
   */
  virtual void SetMakeDiagnostics(Bool_t use=true) { fStore = use; }
  /** 
   * Get the event inspector
   * 
   * @return Reference to used event inspector
   */
  AliFMDEventInspector& GetEventInspector() { return fInspector; }
  /** 
   * Get the event inspector
   * 
   * @return Reference to used event inspector
   */
  const AliFMDEventInspector& GetEventInspector() const { return fInspector; }

protected:
  /** 
   * Copy constructor 
   * 
   * @param o Object to copy from 
   */
  AliCentralMultiplicityTask(const AliCentralMultiplicityTask& o);
  /** 
   * Assignment operator 
   * 
   * @param o Object to assign from 
   * 
   * @return Reference to this object 
   */
  AliCentralMultiplicityTask& operator=(const AliCentralMultiplicityTask& o);
  /** 
   * Process the ESD SPD information 
   * 
   * @param hist    Histogram to fill
   * @param spdmult SPD multiplicity object
   */
  virtual void ProcessESD(TH2D& hist, 
			  const AliMultiplicity* spdmult) const;
  /**
   * A vertex bin. 
   *
   * Used to store and apply corrections and fiducial cuts
   */
  struct VtxBin : public TObject
  {
    /** 
     * Constructor 
     * 
     * @param iVz    Bin number
     * @param minIpZ Least @f$IP_{z}@f$
     * @param maxIpZ Largest  @f$IP_{z}@f$
     */
    VtxBin(Int_t iVz=0, Double_t minIpZ=0, Double_t maxIpZ=0);
    /** 
     * 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 the name 
     * 
     * @return The name 
     */
    const char* GetName() const;
    /** 
     * Prepare for data 
     * 
     * @param l         List
     * @param coverage  Template 
     * @param store     Whether to store results
     */
    void SetupForData(TList* l, TH2* coverage, Bool_t store=true);
    /** 
     * Correct the input data
     * 
     * @param aodHist       Histogram
     * @param useSecondary  Whether to use secondary correction or not 
     * @param useAcceptance Whether to use acceptance correction or not 
     * @param sum           Whether to sum or not 
     */
    void Correct(TH2D&  aodHist,
		 Bool_t useSecondary,
		 Bool_t useAcceptance,
		 Bool_t sum=true) const;
    /** 
     * Print information
     * 
     * @param option Not used 
     */
    void Print(Option_t* option="") const;

    Int_t        fId;     // Vertex bin number 
    Double_t     fMinIpZ; // Least value of ipZ 
    Double_t     fMaxIpZ; // Largest value of ipZ 
    Int_t        fEtaMin; // Smallest eta bin to use 
    Int_t        fEtaMax; // Largest eta bin to use 
    TH2*         fSec;    // Our secondary correction
    TH1*         fAcc;    // Our acceptance correction 
    mutable TH2* fHits;   // Diagnostics sum 

    ClassDef(VtxBin,1);
  };
    
protected: 
  /** 
   * Make a simple @f$\frac{dN_{ch}}{d\eta}@f$ estimate. 
   * 
   * @param input   Sum list
   * @param output  Output list 
   * @param nTr     On return, the number of events w/triggers
   * @param nTrVtx  On return, the number of events w/triggers+vertex
   * @param nAcc    On return, the number of accepted events 
   * 
   * @return true on success, false otherwise 
   */
  Bool_t MakeSimpledNdeta(const TList* input, 
			  TList*       output,
			  Double_t&    nTr, 
			  Double_t&    nTrVtx, 
			  Double_t&    nAcc);
  TAxis* DefaultEtaAxis() const { return new TAxis(200,-4,6); }
  TAxis* DefaultVertexAxis() const { return new TAxis(10,-10,10); }
  AliFMDEventInspector   fInspector;        // Inspect events 
  AliAODCentralMult      fAODCentral;       // Output object
  Bool_t                 fUseSecondary;     // Whether to secondary map
  Bool_t                 fUseAcceptance;    // Whether to use acceptance corr.
  Int_t                  fIvz;              // Event's vertex bin 
  TH2D*                  fNClusterTracklet; // # of clusters vs tracklets 
  TH2D*                  fClusterPerTracklet; // Clusters per tracklet. 
  TH1D*                  fNCluster;         //! Number of clusters 
  TH1D*                  fNTracklet;        //! number of tracklets 
  TObjArray*             fVtxList;          //! Array of vertex bins
  Bool_t                 fStore;            // Store diagnostics
  TH2D*                  fHData;            // Sum of signals 
private:
  ClassDef(AliCentralMultiplicityTask,5)    // Forward multiplicity class
};

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

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