ROOT logo
#ifndef ALIANACALOTRACKCORRMAKER_H
#define ALIANACALOTRACKCORRMAKER_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice     */

//_____________________________________________________________________________
// Steering class for particle (gamma, hadron) identification and correlation 
// analysis. It is called by the task class AliAnalysisTaskCaloTrackCorrelation 
// and it connects the input (ESD/AOD/MonteCarlo) got with AliCaloTrackReader 
// (produces TClonesArrays of AODs (TParticles in MC case if requested)), with 
// the analysis classes that derive from AliAnaCaloTrackCorrBaseClass
//
// -- Author: Gustavo Conesa (INFN-LNF, LPSC-Grenoble)

// --- ROOT system ---
class TList; 
class TClonesArray;
#include<TObject.h>
class TH1F;

// --- Analysis system ---
#include "AliCaloTrackReader.h" 
#include "AliCalorimeterUtils.h"

class AliAnaCaloTrackCorrMaker : public TObject {

 public: 
  
  AliAnaCaloTrackCorrMaker() ;          // default ctor
  virtual ~AliAnaCaloTrackCorrMaker() ; // virtual dtor
  AliAnaCaloTrackCorrMaker(const AliAnaCaloTrackCorrMaker & maker) ; // cpy ctor
	
  // Setters and Getters
  
  void    AddAnalysis(TObject* ana, Int_t n) ;

  void    FillControlHistograms();
  
  void    FillTriggerControlHistograms();
  
  TList * GetListOfAnalysisContainers() { return fAnalysisContainer ; }
  
  TList * GetListOfAnalysisCuts();
  
  TList * GetOutputContainer() ;
  
  TList * FillAndGetAODBranchList();
  
  Int_t   GetAnaDebug()           const { return fAnaDebug    ; }
  void    SetAnaDebug(Int_t d)          { fAnaDebug = d       ; }
	
  Bool_t  AreHistogramsMade()     const { return fMakeHisto   ; }
  void    SwitchOnHistogramsMaker()     { fMakeHisto = kTRUE  ; }
  void    SwitchOffHistogramsMaker()    { fMakeHisto = kFALSE ; }
 
  Bool_t  AreAODsMade()           const { return fMakeAOD     ; }
  void    SwitchOnAODsMaker()           { fMakeAOD = kTRUE    ; }
  void    SwitchOffAODsMaker()          { fMakeAOD = kFALSE   ; }
  	
  void    SwitchOnDataControlHistograms()  { fFillDataControlHisto = kTRUE  ; }
  void    SwitchOffDataControlHistograms() { fFillDataControlHisto = kFALSE ; }

  
  AliCaloTrackReader  * GetReader()                                   { if(!fReader) fReader = new AliCaloTrackReader ();
                                                                        return fReader    ; }
  void                  SetReader(AliCaloTrackReader * reader)        { fReader = reader  ; }
  	
  AliCalorimeterUtils * GetCaloUtils()                                { if(!fCaloUtils) fCaloUtils = new AliCalorimeterUtils(); 
                                                                        return fCaloUtils      ; }
  void                  SetCaloUtils(AliCalorimeterUtils * caloutils) { fCaloUtils = caloutils ; }
	
  void                  SetScaleFactor(Double_t scale)                { fScaleFactor = scale   ; } 

  
  // Main general methods
  
  void    Init();
  
  void    InitParameters();
  
  void    Print(const Option_t * opt) const;
  
  void    ProcessEvent(Int_t iEntry, const char * currentFileName) ;
  
  void    Terminate(TList * outputList);
  
 private:
  
  //General Data members
  
  AliCaloTrackReader  *  fReader ;    //  Pointer to reader 
  AliCalorimeterUtils *  fCaloUtils ; //  Pointer to CalorimeterUtils
  
  TList *  fOutputContainer ;   //! Output histograms container
  TList *  fAnalysisContainer ; //  List with analysis pointers
  Bool_t   fMakeHisto ;         //  If true makes final analysis with histograms as output
  Bool_t   fMakeAOD ;           //  If true makes analysis generating AODs
  Int_t    fAnaDebug;           //  Debugging info.
  TList *  fCuts ;	            //! List with analysis cuts
  Double_t fScaleFactor ;       //  Scaling factor needed for normalization
  Bool_t   fFillDataControlHisto;//! Fill histograms only interesting with data
  
  // Control histograms
  TH1F *   fhNEventsIn;         //! Number of input events counter histogram
  TH1F *   fhNEvents;           //! Number of acepted events counter histogram
  TH1F *   fhNExoticEvents;     //! Number of events triggered by exotic, counter histogram
  TH1F *   fhNEventsNoTriggerFound; //! number of events where whaetever was done, no trigger is found
  TH1F *   fhNPileUpEvents;     //! N events pasing pile up cut
  TH1F *   fhNPileUpEventsTriggerBC0; //! N events pasing pile up cut
  TH1F *   fhXVertex;           //! X Vertex distribution of accepted event
  TH1F *   fhYVertex;           //! Y Vertex distribution of accepted event
  TH1F *   fhZVertex;           //! Z Vertex distribution of accepted event
  TH1F *   fhXVertexExotic;     //! X Vertex distribution of exotic event
  TH1F *   fhYVertexExotic;     //! Y Vertex distribution of exotic event
  TH1F *   fhZVertexExotic;     //! Z Vertex distribution of exotic event
  
  TH1F *   fhPileUpClusterMult; //! N clusters with high time
  TH1F *   fhPileUpClusterMultAndSPDPileUp; //! N clusters with high time in events tagged as pile-up by SPD
  TH1F *   fhTrackMult;         //! Number of tracks per event histogram
  TH1F *   fhCentrality;        //! Histogram with centrality bins
  TH1F *   fhEventPlaneAngle;   //! Histogram with Event plane angle
  TH1F *   fhNMergedFiles;      //! Number of files merged
  TH1F *   fhScaleFactor;       //! Factor to scale histograms
  TH1F *   fhEMCalBCEvent;      //! N events depending on the existence of a cluster in a given bunch crossing
  TH1F *   fhEMCalBCEventCut;   //! N events depending on the existence of a cluster above acceptance and E cut in a given bunch crossing
  TH1F *   fhTrackBCEvent;      //! N events depending on the existence of a track in a given bunch crossing
  TH1F *   fhTrackBCEventCut;   //! N events depending on the existence of a track above acceptance and pt cut in a given bunch crossing
  TH1F *   fhPrimaryVertexBC;   //! Primary vertex BC
  TH1F *   fhTimeStampFraction; //! event fraction depending on Time Stamp, only if activated on reader
  TH1F *   fhNPileUpVertSPD;    //! number of pile-up vertices from SPD
  TH1F *   fhNPileUpVertTracks; //! number of pile-up vertices from tracks
  
  TH1F *   fhClusterTriggerBC;                       //! number of events triggered, depending on BC of the cluster
  TH1F *   fhClusterTriggerBCExotic;                 //! number of events triggered, depending on BC of the cluster
  TH1F *   fhClusterTriggerBCBadCell;                //! number of events triggered, depending on BC of the cluster
  TH1F *   fhClusterTriggerBCBadCellExotic;          //! number of events triggered, depending on BC of the cluster
  TH1F *   fhClusterTriggerBCBadCluster;             //! number of events triggered, depending on BC of the cluster
  TH1F *   fhClusterTriggerBCBadClusterExotic;       //! number of events triggered, depending on BC of the cluster
  
  TH1F *   fhClusterTriggerBCUnMatch;                //! number of events triggered, depending on BC of the cluster
  TH1F *   fhClusterTriggerBCExoticUnMatch;          //! number of events triggered, depending on BC of the cluster
  TH1F *   fhClusterTriggerBCBadCellUnMatch;         //! number of events triggered, depending on BC of the cluster
  TH1F *   fhClusterTriggerBCBadCellExoticUnMatch;   //! number of events triggered, depending on BC of the cluster
  TH1F *   fhClusterTriggerBCBadClusterUnMatch;      //! number of events triggered, depending on BC of the cluster
  TH1F *   fhClusterTriggerBCBadClusterExoticUnMatch;//! number of events triggered, depending on BC of the cluster

  TH1F *   fhClusterTriggerBCUnMatchReMatch[3];       //! number of events triggered, depending on BC of the cluster, not matched, open cuts and rematch
  TH1F *   fhClusterTriggerBCExoticUnMatchReMatch[3]; //! number of events triggered by exotic, depending on BC of the clusterm not matched, open cuts and rematch

  
  TH2F *   fhClusterTriggerBCEventBC;                // correlate the found BC in the trigger and the event BC
  TH2F *   fhClusterTriggerBCEventBCUnMatch;         // correlate the found BC in the trigger and the event BC, when there was no match with the trigger BC
  TH2F *   fhClusterTriggerBCExoticEventBC;          // correlate the found BC in the exotic trigger and the event BC
  TH2F *   fhClusterTriggerBCExoticEventBCUnMatch;   // correlate the found BC in the exotic trigger and the event BC, when there was no match with the trigger BC
  
  AliAnaCaloTrackCorrMaker & operator = (const AliAnaCaloTrackCorrMaker & ) ; // cpy assignment
  
  ClassDef(AliAnaCaloTrackCorrMaker,22)
} ;
 

#endif //ALIANACALOTRACKCORRMAKER_H



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