ROOT logo
#ifndef ALIANALYSISTASKCALOFILTER_H
#define ALIANALYSISTASKCALOFILTER_H

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

//////////////////////////////////////////////////////////
// Filter the ESDCaloClusters and ESDCaloCells of EMCAL,
// PHOS or both, creating the corresponing AODCaloClusters
// and AODCaloCells.
// Fill also the AODHeader information and the vertex.
// Fill tracks if requested
// Copy of AliAnalysisTaskESDfilter.
// Author: Gustavo Conesa Balbastre (INFN - Frascati)
//////////////////////////////////////////////////////////

#include "AliAnalysisTaskSE.h"
class AliEMCALRecoUtils;
class AliEMCALGeometry;
class AliESDEvent;
class AliAODEvent;

class AliAnalysisTaskCaloFilter : public AliAnalysisTaskSE
{
 public:
  
  AliAnalysisTaskCaloFilter();
  AliAnalysisTaskCaloFilter(const char* name);
  virtual ~AliAnalysisTaskCaloFilter() ;
    
  //General analysis frame methods
  
  virtual void   UserCreateOutputObjects();
  virtual void   Init();
  virtual void   LocalInit() { Init() ; }
  virtual void   UserExec(Option_t *option);
        
  // Task own methods
  
  Bool_t  AcceptEvent() ;
  
  Bool_t  AcceptEventEMCAL();

  Bool_t  AcceptEventPHOS();
  
  Bool_t  AcceptEventTrack();
  
  Bool_t  AcceptEventVertex();
  
  Bool_t  CheckForPrimaryVertex();
  
  void    CorrectionsInEMCAL();
  
  void    FillAODHeader();

  void    FillAODCaloCells();
  
  void    FillAODCaloClusters();
  
  void    FillAODCaloTrigger();

  void    FillAODMCParticles();
  
  void    FillAODTracks();

  void    FillAODv0s();
  
  void    FillAODVertices();
  
  void    FillAODVZERO();
  
  void    PrintInfo();
  
  // * Task settings *
  
  // Geometry methods
  
  void    SetEMCALGeometryName(TString name)                  { fEMCALGeoName = name        ; }
  TString    EMCALGeometryName()                       const  { return fEMCALGeoName        ; }
  
  void    SwitchOnLoadOwnEMCALGeometryMatrices()              { fLoadEMCALMatrices = kTRUE  ; }
  void    SwitchOffLoadOwnEMCALGeometryMatrices()             { fLoadEMCALMatrices = kFALSE ; }
  void    SetEMCALGeometryMatrixInSM(TGeoHMatrix* m, Int_t i) { fEMCALMatrix[i]    = m      ; }
  
  //void    SwitchOnLoadOwnPHOSGeometryMatrices()               { fLoadPHOSMatrices = kTRUE  ; }
  //void    SwitchOffLoadOwnPHOSGeometryMatrices()              { fLoadPHOSMatrices = kFALSE ; }
  //void    SetPHOSGeometryMatrixInSM(TGeoHMatrix* m, Int_t i)  { fPHOSMatrix[i]    = m      ; }
    
  void    SwitchOnCheckEventPrimaryVertex()       { fCheckEventVertex = kTRUE   ; }
  void    SwitchOffCheckEventPrimaryVertex()      { fCheckEventVertex = kFALSE  ; }

  void    SwitchOnFillAODFile()                   { fFillAODFile = kTRUE        ; }
  void    SwitchOffFillAODFile()                  { fFillAODFile = kFALSE       ; }

  void    SwitchOnFillMCParticles()               { fFillMCParticles = kTRUE    ; }
  void    SwitchOffFillMCParticles()              { fFillMCParticles = kFALSE   ; }
  
  void    SwitchOnFillTracks()                    { fFillTracks  = kTRUE        ; }
  void    SwitchOffFillTracks()                   { fFillTracks  = kFALSE       ; }
  
  void    SwitchOnFillHybridTracks()              { fFillTracks  = kTRUE        ;
                                                    fFillHybridTracks  = kTRUE  ; }
  void    SwitchOffFillHybridTracks()             { fFillHybridTracks  = kFALSE ; }
  
  void    SwitchOnFillv0s()                       { fFillv0s     = kTRUE        ; }
  void    SwitchOffFillv0s()                      { fFillv0s     = kFALSE       ; }
  
  void    SwitchOnFillVZERO()                     { fFillVZERO   = kTRUE        ; }
  void    SwitchOffFillVZERO()                    { fFillVZERO   = kFALSE       ; }
  
  void    SwitchOnFillAllVertices()               { fFillAllVertices = kTRUE    ; }
  void    SwitchOffFillAllVertices()              { fFillAllVertices = kFALSE   ; }
  
  enum    caloFilter {kBoth = 0, kEMCAL = 1, kPHOS=2};
  
  void    SetCaloFilter(Int_t calo)               { fCaloFilter = calo          ; }
  TString GetCaloFilter()                  const  { return fCaloFilter          ; }  
  
  void    SetEventSelection(Bool_t emcal, Bool_t phos, Bool_t track) { 
    // Detector involved in event selection
    fEventSelection[0] = emcal ; fEventSelection[1] = phos ; fEventSelection[2] = track ; }
  
  void    SwitchOnAcceptAllMBEvent()              { fAcceptAllMBEvent = kTRUE   ; }
  void    SwitchOffAcceptAllMBEvent()             { fAcceptAllMBEvent = kFALSE  ; }

  void    SetMBTriggerMask(UInt_t mask)           { fMBTriggerMask    = mask    ; }
  
  void    SetEMCALRecoUtils(AliEMCALRecoUtils* ru){ fEMCALRecoUtils = ru        ; }
  AliEMCALRecoUtils* GetEMCALRecoUtils()   const  { return fEMCALRecoUtils      ; }

  void    SwitchOnClusterCorrection()             { fCorrect = kTRUE            ; }
  void    SwitchOffClusterCorrection()            { fCorrect = kFALSE           ; }
  
  void    SetConfigFileName(TString name)         { fConfigName = name          ; }
  
  void    SetEMCALEnergyCut(Float_t cut)          { fEMCALEnergyCut = cut       ; }
  Float_t GetEMCALEnergyCut()               const { return fEMCALEnergyCut      ; }
  void    SetEMCALNcellsCut(Int_t cut)            { fEMCALNcellsCut = cut       ; }
  Int_t   GetEMCALNcellsCut()               const { return fEMCALNcellsCut      ; }
  
  void    SetPHOSEnergyCut(Float_t cut)           { fPHOSEnergyCut = cut        ; }
  Float_t GetPHOSEnergyCut()                const { return fPHOSEnergyCut       ; }
  void    SetPHOSNcellsCut(Int_t cut)             { fPHOSNcellsCut = cut        ; }
  Int_t   GetPHOSNcellsCut()                const { return fPHOSNcellsCut       ; }
  
  void    SetTrackPtCut(Float_t cut)              { fTrackPtCut = cut           ; }
  Float_t GetTrackPtCut()                   const { return fTrackPtCut          ; }
  
  void    SetVzCut(Float_t cut)                   { fVzCut = cut                ; }
  Float_t GetVzCut()                        const { return fVzCut               ; }
  
  
private:
    
  Int_t               fCaloFilter;        // Calorimeter to filter
  Bool_t              fEventSelection[3]; // Define which detector is used to select the event
  Bool_t              fAcceptAllMBEvent;  // Do not select the MB events with same cuts as other triggers
  UInt_t              fMBTriggerMask;     // Define the mask for MB events, it should be kMB, but not always defined, use kAnyINT instead
  Int_t               fCorrect;           // Recalibrate or recalculate different cluster parameters
  
  //EMCAL specific
  AliEMCALGeometry  * fEMCALGeo;          //! EMCAL geometry
  TString             fEMCALGeoName;      // Name of geometry to use.
  AliEMCALRecoUtils * fEMCALRecoUtils;    // Pointer to EMCAL utilities for clusterization
  
  //Geometry
  Bool_t              fLoadEMCALMatrices; // Matrices set from configuration, not get from geometry.root or from ESDs/AODs
  TGeoHMatrix       * fEMCALMatrix[12];   // Geometry matrices with alignments
  //Bool_t            fLoadPHOSMatrices;  // Matrices set from configuration, not get from geometry.root or from ESDs/AODs
  //TGeoHMatrix *     fPHOSMatrix[5];     // Geometry matrices with alignments
  Bool_t              fGeoMatrixSet;      // Set geometry matrices only once, for the first event.   
  
  TString             fConfigName;        // Name of analysis configuration file
  
  Bool_t              fFillAODFile;       // Fill the output AOD file with clusters 
  Bool_t              fFillMCParticles;   // Fill tracks
  Bool_t              fFillTracks;        // Fill tracks
  Bool_t              fFillHybridTracks;  // Fill hybrid tracks

  Bool_t              fFillAllVertices;   // Fill all vertices
  Bool_t              fFillv0s;           // Fill v0s
  Bool_t              fFillVZERO;         // Fill VZERO

  Float_t             fEMCALEnergyCut;    //  At least an EMCAL cluster with this energy in the event
  Int_t               fEMCALNcellsCut;    //  At least an EMCAL cluster with fNCellsCut cells over fEnergyCut

  Float_t             fPHOSEnergyCut;     //  At least a PHOS cluster with this energy in the event
  Int_t               fPHOSNcellsCut;     //  At least a PHOS cluster with fNCellsCut cells over fEnergyCut
  
  Float_t             fTrackPtCut;        //  At least a track with this pT in the event
  
  Float_t             fVzCut;             //  At least events with vertex within cut
  
  Bool_t              fCheckEventVertex;  // Check the primary vertex of the event or not

  AliVEvent*          fEvent;             //! event pointer
  AliESDEvent*        fESDEvent;          //! ESD event pointer
  AliAODEvent*        fAODEvent;          //! AOD event pointer

  
  AliAnalysisTaskCaloFilter(           const AliAnalysisTaskCaloFilter&);
  AliAnalysisTaskCaloFilter& operator=(const AliAnalysisTaskCaloFilter&);
  
  ClassDef(AliAnalysisTaskCaloFilter, 11); // Analysis task for standard ESD filtering
  
};

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