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

/* $Id$ */

//-------------------------------------------------------------------------
//     ESD Input Handler realisation of the AliVEventHandler interface
//     Author: Andreas Morsch, CERN
//-------------------------------------------------------------------------

#include "AliInputEventHandler.h"
#include "AliESDEvent.h"
class TChain;
class TTree;
class AliRunTag;
class AliEventTag;
class TMap;
class AliESDfriend;
class AliESDpid;
class AliESDEvent;
class AliPIDResponse;


class AliESDInputHandler : public AliInputEventHandler {

 public:
    AliESDInputHandler();
    AliESDInputHandler(const char* name, const char* title);
    virtual ~AliESDInputHandler();
    virtual Bool_t       Init(Option_t* opt) {return AliInputEventHandler::Init(opt);}
    virtual Bool_t       Init(TTree* tree, Option_t* opt);
    virtual Bool_t       BeginEvent(Long64_t entry);
    virtual Bool_t       Notify() { return AliInputEventHandler::Notify(); };
    virtual Bool_t       Notify(const char* path);
    virtual Bool_t       FinishEvent();
    void                 CheckSelectionMask();
    AliESDEvent         *GetEvent()        const {return fEvent;}
    Option_t            *GetAnalysisType() const {return fAnalysisType;}
    Option_t            *GetDataType() const;
    // Tag cut summary analysis
    Int_t                GetNEventAcceptedInFile();
    Int_t                GetNEventRejectedInFile();
    Bool_t               GetCutSummaryForChain(Int_t *aTotal, Int_t *aAccepted, Int_t *aRejected);
    Int_t                GetNFilesEmpty();
    // HLT  analysis
    AliESDEvent         *GetHLTEvent()     const {return fHLTEvent;}
    TTree               *GetHLTTree()      const {return fHLTTree;}    
    void                 SetReadHLT()            {Changed(); fUseHLT = kTRUE;}
    Bool_t               GetReadHLT()      const {return fUseHLT;}
    // Friends&Co
    AliESDfriend        *GetESDfriend()    const {return fFriend;}
    void                 SetReadFriends(Bool_t flag)   {Changed(); fReadFriends = flag;}
    Bool_t               GetReadFriends()  const {return fReadFriends;}
    void                 SetFriendFileName(const char *fname)  {Changed(); fFriendFileName = fname;}
    const char          *GetFriendFileName() const {return fFriendFileName;}
    // Tag analysis
    void                 SetReadTags()           {Changed(); fUseTags = kTRUE;}
    AliRunTag           *GetRunTag() const       {return fRunTag;}
    const AliEventTag   *GetEventTag() const     {return fEventTag;}
    // Get the statistics object (currently TH2). Option can be BIN0.
    virtual TObject     *GetStatistics(Option_t *option="") const;

    //PID response
    virtual AliPIDResponse* GetPIDResponse() {return (AliPIDResponse*)fESDpid;}
    virtual void CreatePIDResponse(Bool_t isMC=kFALSE);
    AliESDpid           *GetESDpid()       const {return fESDpid;}
    void                 SetESDpid(AliESDpid* pid)     {Changed(); fESDpid = pid;}

    //HLT
    virtual AliVfriendEvent*   GetVfriendEvent() const {return fFriend;};
  
 private:
    AliESDInputHandler(const AliESDInputHandler& handler);             
    AliESDInputHandler& operator=(const AliESDInputHandler& handler);  
    void                 ConnectFriends();
 protected:
    // ESD event
    AliESDEvent    *fEvent;         //! Pointer to the event
    AliESDfriend   *fFriend;        //! Pointer to the esd friend
    AliESDpid      *fESDpid;        //! Pointer to PID information
    Option_t       *fAnalysisType;  //! local, proof, grid
    Int_t           fNEvents;       //! Number of events in the current tree
    // HLT event
    AliESDEvent    *fHLTEvent;      //! Pointer to the HLT Event (if present)
    TTree          *fHLTTree;       //! Pointer to the HLT Event (if present)
    Bool_t          fUseHLT;        //  Flag to access HLT Events
    // ESD Tag Cut Summary
    TMap           *fTagCutSumm;    //! Tag cut summary map
    // ESD Tags (optional)
    Bool_t          fUseTags;       //  Flag to use tags
    TChain         *fChainT;        //! File with event tags
    TTree          *fTreeT;         //! Tree of tags
    AliRunTag      *fRunTag;        //! Pointer to the run tag
    const AliEventTag *fEventTag;      //! Current event tag
    // Friends
    Bool_t          fReadFriends;   //  Flag for friends reading 
    TString         fFriendFileName;//  Name of the file containing the frien tree (branch)
    ClassDef(AliESDInputHandler, 6);
};

#endif
 AliESDInputHandler.h:1
 AliESDInputHandler.h:2
 AliESDInputHandler.h:3
 AliESDInputHandler.h:4
 AliESDInputHandler.h:5
 AliESDInputHandler.h:6
 AliESDInputHandler.h:7
 AliESDInputHandler.h:8
 AliESDInputHandler.h:9
 AliESDInputHandler.h:10
 AliESDInputHandler.h:11
 AliESDInputHandler.h:12
 AliESDInputHandler.h:13
 AliESDInputHandler.h:14
 AliESDInputHandler.h:15
 AliESDInputHandler.h:16
 AliESDInputHandler.h:17
 AliESDInputHandler.h:18
 AliESDInputHandler.h:19
 AliESDInputHandler.h:20
 AliESDInputHandler.h:21
 AliESDInputHandler.h:22
 AliESDInputHandler.h:23
 AliESDInputHandler.h:24
 AliESDInputHandler.h:25
 AliESDInputHandler.h:26
 AliESDInputHandler.h:27
 AliESDInputHandler.h:28
 AliESDInputHandler.h:29
 AliESDInputHandler.h:30
 AliESDInputHandler.h:31
 AliESDInputHandler.h:32
 AliESDInputHandler.h:33
 AliESDInputHandler.h:34
 AliESDInputHandler.h:35
 AliESDInputHandler.h:36
 AliESDInputHandler.h:37
 AliESDInputHandler.h:38
 AliESDInputHandler.h:39
 AliESDInputHandler.h:40
 AliESDInputHandler.h:41
 AliESDInputHandler.h:42
 AliESDInputHandler.h:43
 AliESDInputHandler.h:44
 AliESDInputHandler.h:45
 AliESDInputHandler.h:46
 AliESDInputHandler.h:47
 AliESDInputHandler.h:48
 AliESDInputHandler.h:49
 AliESDInputHandler.h:50
 AliESDInputHandler.h:51
 AliESDInputHandler.h:52
 AliESDInputHandler.h:53
 AliESDInputHandler.h:54
 AliESDInputHandler.h:55
 AliESDInputHandler.h:56
 AliESDInputHandler.h:57
 AliESDInputHandler.h:58
 AliESDInputHandler.h:59
 AliESDInputHandler.h:60
 AliESDInputHandler.h:61
 AliESDInputHandler.h:62
 AliESDInputHandler.h:63
 AliESDInputHandler.h:64
 AliESDInputHandler.h:65
 AliESDInputHandler.h:66
 AliESDInputHandler.h:67
 AliESDInputHandler.h:68
 AliESDInputHandler.h:69
 AliESDInputHandler.h:70
 AliESDInputHandler.h:71
 AliESDInputHandler.h:72
 AliESDInputHandler.h:73
 AliESDInputHandler.h:74
 AliESDInputHandler.h:75
 AliESDInputHandler.h:76
 AliESDInputHandler.h:77
 AliESDInputHandler.h:78
 AliESDInputHandler.h:79
 AliESDInputHandler.h:80
 AliESDInputHandler.h:81
 AliESDInputHandler.h:82
 AliESDInputHandler.h:83
 AliESDInputHandler.h:84
 AliESDInputHandler.h:85
 AliESDInputHandler.h:86
 AliESDInputHandler.h:87
 AliESDInputHandler.h:88
 AliESDInputHandler.h:89
 AliESDInputHandler.h:90
 AliESDInputHandler.h:91
 AliESDInputHandler.h:92
 AliESDInputHandler.h:93
 AliESDInputHandler.h:94
 AliESDInputHandler.h:95
 AliESDInputHandler.h:96
 AliESDInputHandler.h:97
 AliESDInputHandler.h:98
 AliESDInputHandler.h:99
 AliESDInputHandler.h:100
 AliESDInputHandler.h:101
 AliESDInputHandler.h:102
 AliESDInputHandler.h:103