ROOT logo
// Analysis task for creating a reduced tree containing event, track and resonance candidate information 
// Author: Ionut-Cristian Arsene (i.c.arsene@gsi.de,i.c.arsene@cern.ch)                                 
// 2012/06/21

#ifndef ALIANALYSISTASKREDUCEDTREE_H
#define ALIANALYSISTASKREDUCEDTREE_H 

#include "TList.h"

#include "AliAnalysisTaskSE.h"

class AliAnalysisCuts;
class TTree;
class TFile;
class AliESDv0Cuts;
class AliESDv0KineCuts;
class AliKFVertex;
class AliReducedEvent;
class AliReducedEventFriend;
class AliReducedPair;
class AliDielectron;

//_________________________________________________________________________
class AliAnalysisTaskReducedTree : public AliAnalysisTaskSE {
  
public:
  AliAnalysisTaskReducedTree();
  AliAnalysisTaskReducedTree(const char *name);
  virtual ~AliAnalysisTaskReducedTree(){  }

  virtual void UserExec(Option_t *option);
  virtual void UserCreateOutputObjects();
  virtual void FinishTaskOutput();
  
  void UsePhysicsSelection(Bool_t phy=kTRUE) {fSelectPhysics=phy;}
  void SetTriggerMask(UInt_t mask) {fTriggerMask=mask;}
  UInt_t GetTriggerMask() const { return fTriggerMask; }
  void SetRejectPileup(Bool_t pileup=kTRUE)     { fRejectPileup=pileup;     }
  
  // Cuts for selection of event to be written to tree
  void SetEventFilter(AliAnalysisCuts * const filter) {fEventFilter=filter;}
  // Cuts for selecting tracks included in the tree
  void SetTrackFilter(AliAnalysisCuts * const filter) {fTrackFilter=filter;}
  // Cuts for selecting tracks to be used for Q vector calculation
  void SetFlowTrackFilter(AliAnalysisCuts * const filter) {fFlowTrackFilter = filter;}
  
  // Cuts for selecting V0s
  void SetK0sPionCuts(AliAnalysisCuts * const filter) {fK0sPionCuts=filter;}
  void SetLambdaProtonCuts(AliAnalysisCuts * const filter) {fLambdaProtonCuts=filter;}
  void SetLambdaPionCuts(AliAnalysisCuts * const filter) {fLambdaPionCuts=filter;}
  void SetGammaElectronCuts(AliAnalysisCuts* const filter) {fGammaElectronCuts=filter;}
  void SetK0sCuts(AliESDv0Cuts* const cuts) {fK0sCuts = cuts;}
  void SetLambdaCuts(AliESDv0Cuts* const cuts) {fLambdaCuts = cuts;}
  void SetGammaConvCuts(AliESDv0KineCuts* const cuts) {fGammaConvCuts = cuts;}
  void SetV0OpenCuts(AliESDv0KineCuts* const cuts) {fV0OpenCuts = cuts;}
  void SetV0StrongCuts(AliESDv0KineCuts* const cuts) {fV0StrongCuts = cuts;}
  void SetK0sMassRange(Double_t min=0.4, Double_t max=0.6) {fK0sMassRange[0]=min; fK0sMassRange[1]=max;}
  void SetLambdaMassRange(Double_t min=1.08, Double_t max=1.15) {fLambdaMassRange[0]=min; fLambdaMassRange[1]=max;}
  void SetGammaConvMassRange(Double_t min=0.0, Double_t max=0.1) {fGammaMassRange[0]=min; fGammaMassRange[1]=max;}
  void SetV0Histograms(AliDielectronHistos * const histos) {fV0Histos=histos;}
  
  // Toggle on/off information branches
  void SetFillTrackInfo(Bool_t flag=kTRUE)        {fFillTrackInfo = flag;}
  void SetFillDielectronInfo(Bool_t flag=kTRUE)   {fFillDielectronInfo = flag;}
  void SetFillV0Info(Bool_t flag=kTRUE)           {fFillV0Info = flag;}
  void SetFillGammaConversions(Bool_t flag=kTRUE) {fFillGammaConversions = flag;}
  void SetFillK0s(Bool_t flag=kTRUE)              {fFillK0s = flag;}
  void SetFillLambda(Bool_t flag=kTRUE)           {fFillLambda = flag;}
  void SetFillALambda(Bool_t flag=kTRUE)          {fFillALambda = flag;}
  void SetFillCaloClusterInfo(Bool_t flag=kTRUE)  {fFillCaloClusterInfo = flag;}
  void SetFillFMDSectorInfo(Bool_t flag=kFALSE)   {fFillFMDSectorInfo = flag;}
  void SetFillFMDChannelInfo(Bool_t flag=kFALSE)  {fFillFMDChannelInfo = flag;}
  void SetFillFriendInfo(Bool_t flag=kTRUE)       {fFillFriendInfo = flag;}
  
  // Add dielectron objects to the list. These contain cuts and histogram definitions
  void AddDielectron(AliDielectron * const die) { fListDielectron.Add(die); }
 
 private:

  TList fListDielectron;             // List of dielectron framework instances
  TList fListHistos;                 //! List of histogram managers in the dielectron framework classes
  
  Bool_t fSelectPhysics;             // Whether to use physics selection
  UInt_t fTriggerMask;               // Event trigger mask
  Bool_t fRejectPileup;              // pileup rejection wanted

  Bool_t fFillTrackInfo;             // fill track information
  Bool_t fFillDielectronInfo;        // fill dielectrons
  Bool_t fFillV0Info;                // fill the V0 information
  Bool_t fFillGammaConversions;      // fill gamma conversions
  Bool_t fFillK0s;                   // fill the K0s V0s
  Bool_t fFillLambda;                // fill the lambda V0s
  Bool_t fFillALambda;               // fill the anti-lambda V0s
  Bool_t fFillCaloClusterInfo;       // fill the calorimeter clusters
  Bool_t fFillFMDSectorInfo;         // fill the FMD info for every sector
  Bool_t fFillFMDChannelInfo;        // fill the FMD info for every channel
  Bool_t fFillFriendInfo;            // fill friend tree information

  AliAnalysisCuts *fEventFilter;     // event filter
  AliAnalysisCuts *fTrackFilter;     // filter for the hadrons to be correlated with the dielectrons
  AliAnalysisCuts *fFlowTrackFilter; // filter for the barrel tracks to be used for the Q-vector
  
  AliESDv0Cuts *fK0sCuts;            // v0 standard filter for K0s->pi+pi-
  AliESDv0Cuts *fLambdaCuts;         // v0 standard filter for Lambda0->p + pi
  AliESDv0KineCuts *fGammaConvCuts;  // v0 standard filter for gamma conversions
  AliAnalysisCuts *fK0sPionCuts;     // filter for pions from K0s
  AliAnalysisCuts *fLambdaProtonCuts;   // filter for protons from Lambda
  AliAnalysisCuts *fLambdaPionCuts;     // filter for pions from Lambda
  AliAnalysisCuts *fGammaElectronCuts;  // filter for electrons from gamma conversions
  AliESDv0KineCuts *fV0OpenCuts;       // v0 strong filter for tagged V0s
  AliESDv0KineCuts *fV0StrongCuts;     // v0 strong filter for tagged V0s
  
    
  Double_t fK0sMassRange[2];         // mass range for allowed K0s pairs
  Double_t fLambdaMassRange[2];      // mass range for allowed Lambda pairs
  Double_t fGammaMassRange[2];       // mass range for allowed Gamma conversion pairs
  AliDielectronHistos* fV0Histos;    // histogram manager for V0s

  TFile *fTreeFile;                  //! output file containing the tree
  TTree *fTree;                      //! Reduced event tree
  TFile *fFriendTreeFile;            //! output file containing the friend tree
  TTree *fFriendTree;                //! Reduced event tree with friend info (event plane, etc.)
  AliReducedEvent *fReducedEvent;    //! reduced event wise information
  AliReducedEventFriend *fReducedEventFriend;    //! friend reduced event wise information
  
  void FillEventInfo();                     // fill reduced event information
  void FillFriendEventInfo();               // fill reduced event friend information
  void FillTrackInfo();                     // fill reduced track information
  void FillDielectronPairInfo(AliDielectron* die, Short_t iDie);  // fill dielectron reduced pair information
  void FillV0PairInfo();                    // fill V0 reduced pair information
  AliReducedPair* FillV0PairInfo(AliESDv0* v0, Int_t id, AliESDtrack* legPos, AliESDtrack* legNeg, AliKFVertex* vtxKF, Bool_t chargesAreCorrect);
  UChar_t EncodeTPCClusterMap(AliVParticle* track, Bool_t isAOD);
  void FillCaloClusters();
  void FillFMDInfo();
  Int_t GetSPDTrackletMultiplicity(AliVEvent* event, Float_t lowEta, Float_t highEta);
  
  AliAnalysisTaskReducedTree(const AliAnalysisTaskReducedTree &c);
  AliAnalysisTaskReducedTree& operator= (const AliAnalysisTaskReducedTree &c);

  ClassDef(AliAnalysisTaskReducedTree, 3); //Analysis Task for creating a reduced event information tree 
};
#endif
 AliAnalysisTaskReducedTree.h:1
 AliAnalysisTaskReducedTree.h:2
 AliAnalysisTaskReducedTree.h:3
 AliAnalysisTaskReducedTree.h:4
 AliAnalysisTaskReducedTree.h:5
 AliAnalysisTaskReducedTree.h:6
 AliAnalysisTaskReducedTree.h:7
 AliAnalysisTaskReducedTree.h:8
 AliAnalysisTaskReducedTree.h:9
 AliAnalysisTaskReducedTree.h:10
 AliAnalysisTaskReducedTree.h:11
 AliAnalysisTaskReducedTree.h:12
 AliAnalysisTaskReducedTree.h:13
 AliAnalysisTaskReducedTree.h:14
 AliAnalysisTaskReducedTree.h:15
 AliAnalysisTaskReducedTree.h:16
 AliAnalysisTaskReducedTree.h:17
 AliAnalysisTaskReducedTree.h:18
 AliAnalysisTaskReducedTree.h:19
 AliAnalysisTaskReducedTree.h:20
 AliAnalysisTaskReducedTree.h:21
 AliAnalysisTaskReducedTree.h:22
 AliAnalysisTaskReducedTree.h:23
 AliAnalysisTaskReducedTree.h:24
 AliAnalysisTaskReducedTree.h:25
 AliAnalysisTaskReducedTree.h:26
 AliAnalysisTaskReducedTree.h:27
 AliAnalysisTaskReducedTree.h:28
 AliAnalysisTaskReducedTree.h:29
 AliAnalysisTaskReducedTree.h:30
 AliAnalysisTaskReducedTree.h:31
 AliAnalysisTaskReducedTree.h:32
 AliAnalysisTaskReducedTree.h:33
 AliAnalysisTaskReducedTree.h:34
 AliAnalysisTaskReducedTree.h:35
 AliAnalysisTaskReducedTree.h:36
 AliAnalysisTaskReducedTree.h:37
 AliAnalysisTaskReducedTree.h:38
 AliAnalysisTaskReducedTree.h:39
 AliAnalysisTaskReducedTree.h:40
 AliAnalysisTaskReducedTree.h:41
 AliAnalysisTaskReducedTree.h:42
 AliAnalysisTaskReducedTree.h:43
 AliAnalysisTaskReducedTree.h:44
 AliAnalysisTaskReducedTree.h:45
 AliAnalysisTaskReducedTree.h:46
 AliAnalysisTaskReducedTree.h:47
 AliAnalysisTaskReducedTree.h:48
 AliAnalysisTaskReducedTree.h:49
 AliAnalysisTaskReducedTree.h:50
 AliAnalysisTaskReducedTree.h:51
 AliAnalysisTaskReducedTree.h:52
 AliAnalysisTaskReducedTree.h:53
 AliAnalysisTaskReducedTree.h:54
 AliAnalysisTaskReducedTree.h:55
 AliAnalysisTaskReducedTree.h:56
 AliAnalysisTaskReducedTree.h:57
 AliAnalysisTaskReducedTree.h:58
 AliAnalysisTaskReducedTree.h:59
 AliAnalysisTaskReducedTree.h:60
 AliAnalysisTaskReducedTree.h:61
 AliAnalysisTaskReducedTree.h:62
 AliAnalysisTaskReducedTree.h:63
 AliAnalysisTaskReducedTree.h:64
 AliAnalysisTaskReducedTree.h:65
 AliAnalysisTaskReducedTree.h:66
 AliAnalysisTaskReducedTree.h:67
 AliAnalysisTaskReducedTree.h:68
 AliAnalysisTaskReducedTree.h:69
 AliAnalysisTaskReducedTree.h:70
 AliAnalysisTaskReducedTree.h:71
 AliAnalysisTaskReducedTree.h:72
 AliAnalysisTaskReducedTree.h:73
 AliAnalysisTaskReducedTree.h:74
 AliAnalysisTaskReducedTree.h:75
 AliAnalysisTaskReducedTree.h:76
 AliAnalysisTaskReducedTree.h:77
 AliAnalysisTaskReducedTree.h:78
 AliAnalysisTaskReducedTree.h:79
 AliAnalysisTaskReducedTree.h:80
 AliAnalysisTaskReducedTree.h:81
 AliAnalysisTaskReducedTree.h:82
 AliAnalysisTaskReducedTree.h:83
 AliAnalysisTaskReducedTree.h:84
 AliAnalysisTaskReducedTree.h:85
 AliAnalysisTaskReducedTree.h:86
 AliAnalysisTaskReducedTree.h:87
 AliAnalysisTaskReducedTree.h:88
 AliAnalysisTaskReducedTree.h:89
 AliAnalysisTaskReducedTree.h:90
 AliAnalysisTaskReducedTree.h:91
 AliAnalysisTaskReducedTree.h:92
 AliAnalysisTaskReducedTree.h:93
 AliAnalysisTaskReducedTree.h:94
 AliAnalysisTaskReducedTree.h:95
 AliAnalysisTaskReducedTree.h:96
 AliAnalysisTaskReducedTree.h:97
 AliAnalysisTaskReducedTree.h:98
 AliAnalysisTaskReducedTree.h:99
 AliAnalysisTaskReducedTree.h:100
 AliAnalysisTaskReducedTree.h:101
 AliAnalysisTaskReducedTree.h:102
 AliAnalysisTaskReducedTree.h:103
 AliAnalysisTaskReducedTree.h:104
 AliAnalysisTaskReducedTree.h:105
 AliAnalysisTaskReducedTree.h:106
 AliAnalysisTaskReducedTree.h:107
 AliAnalysisTaskReducedTree.h:108
 AliAnalysisTaskReducedTree.h:109
 AliAnalysisTaskReducedTree.h:110
 AliAnalysisTaskReducedTree.h:111
 AliAnalysisTaskReducedTree.h:112
 AliAnalysisTaskReducedTree.h:113
 AliAnalysisTaskReducedTree.h:114
 AliAnalysisTaskReducedTree.h:115
 AliAnalysisTaskReducedTree.h:116
 AliAnalysisTaskReducedTree.h:117
 AliAnalysisTaskReducedTree.h:118
 AliAnalysisTaskReducedTree.h:119
 AliAnalysisTaskReducedTree.h:120
 AliAnalysisTaskReducedTree.h:121
 AliAnalysisTaskReducedTree.h:122
 AliAnalysisTaskReducedTree.h:123
 AliAnalysisTaskReducedTree.h:124
 AliAnalysisTaskReducedTree.h:125
 AliAnalysisTaskReducedTree.h:126
 AliAnalysisTaskReducedTree.h:127
 AliAnalysisTaskReducedTree.h:128
 AliAnalysisTaskReducedTree.h:129
 AliAnalysisTaskReducedTree.h:130
 AliAnalysisTaskReducedTree.h:131
 AliAnalysisTaskReducedTree.h:132
 AliAnalysisTaskReducedTree.h:133
 AliAnalysisTaskReducedTree.h:134
 AliAnalysisTaskReducedTree.h:135
 AliAnalysisTaskReducedTree.h:136
 AliAnalysisTaskReducedTree.h:137
 AliAnalysisTaskReducedTree.h:138
 AliAnalysisTaskReducedTree.h:139
 AliAnalysisTaskReducedTree.h:140
 AliAnalysisTaskReducedTree.h:141
 AliAnalysisTaskReducedTree.h:142