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

/* $Id$ */

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

#include "AliInputEventHandler.h"
#include "AliAODEvent.h"
#include "AliMCEvent.h"
#include "AliAODMCHeader.h"
class TList;
class AliMCEvent;
class TH2F;
class AliMCEvent;
class AliAODpidUtil;
class AliPIDResponse;


class AliAODInputHandler : public AliInputEventHandler {

 public:
    AliAODInputHandler();
    AliAODInputHandler(const char* name, const char* title);
    virtual ~AliAODInputHandler();
    virtual Bool_t       Init(Option_t* /*opt*/) {return kTRUE;}
    virtual Bool_t       Init(TTree* tree, Option_t* opt);
    AliAODEvent         *GetEvent() const {return fEvent;}
    AliMCEvent          *MCEvent()  const {return fMCEvent;}
    virtual void         AddFriend(char* filename);
    virtual Bool_t       BeginEvent(Long64_t entry);
    virtual Bool_t       Notify() { return AliVEventHandler::Notify();};
    virtual Bool_t       Notify(const char* path);
    virtual Bool_t       FinishEvent();
    Option_t            *GetDataType() const;
    // Get the statistics object (currently TH2). Option can be BIN0.
    virtual TObject     *GetStatistics(Option_t *option="") const;
    // Provisions for event merging
    void                 SetMergeEvents(Bool_t flag) {fMergeEvents = flag;}
    Bool_t               GetMergeEvents() const {return fMergeEvents;}
    AliAODEvent*         GetEventToMerge() {return fAODEventToMerge;}
    TTree*               GetTreeToMerge()  const {return fTreeToMerge;}
    void                 SetMergeOffset(Int_t ioff) {fMergeOffset = ioff;}
    Int_t                GetMergeOffset()     const {return fMergeOffset;}
    void                 SetMergeTracks(Bool_t flag) {fMergeTracks = flag;}
    Bool_t               GetMergeTracks()      const {return fMergeTracks;}
    void                 SetMergeEMCALClusters(Bool_t flag) {fMergeEMCALClusters = flag;}
    Bool_t               GetMergeEMCALClusters()      const {return fMergeEMCALClusters;}
    void                 SetMergeEMCALCells(Bool_t flag)    {fMergeEMCALCells    = flag;}
    Bool_t               GetMergeEMCALCells()         const {return fMergeEMCALCells   ;} 
    void                 SetMergePHOSClusters(Bool_t flag) {fMergePHOSClusters   = flag;}
    Bool_t               GetMergePHOSClusters()      const {return fMergePHOSClusters  ;}
    void                 SetMergePHOSCells(Bool_t flag)    {fMergePHOSCells      = flag;}
    Bool_t               GetMergePHOSCells()         const {return fMergePHOSCells     ;}  
    void                 SetMergeEMCALTrigger(Bool_t flag)    {fMergeEMCALTrigger      = flag;}
    Bool_t               GetMergeEMCALTrigger()         const {return fMergeEMCALTrigger     ;}  
    void                 SetMergePHOSTrigger(Bool_t flag)    {fMergePHOSTrigger      = flag;}
    Bool_t               GetMergePHOSTrigger()         const {return fMergePHOSTrigger     ;}  
    void                 SetMergeHMPIDrings(Bool_t flag)    {fMergeHMPIDrings      = flag;}
    Bool_t               GetMergeHMPIDrings()         const {return fMergeHMPIDrings     ;}  

    //PID response
    virtual AliPIDResponse* GetPIDResponse() {return (AliPIDResponse*)fAODpidUtil;}
    virtual void CreatePIDResponse(Bool_t isMC=kFALSE);
    AliAODpidUtil *GetAODpidUtil() const { return fAODpidUtil; }
  
 private:
    void ConnectFriends();
    AliAODInputHandler(const AliAODInputHandler& handler);             
    AliAODInputHandler& operator=(const AliAODInputHandler& handler);  
 private:
    AliAODEvent    *fEvent;   //! Pointer to the event
    AliMCEvent     *fMCEvent; //! Pointer to the MCEvent
    TList          *fFriends; //  List of friend trees
    AliAODpidUtil  *fAODpidUtil; //! Pointer to PID information
  
// Support for merged events
    Bool_t          fMergeEvents;     // Flag for event merging
    Bool_t          fMergeTracks;        // Merge tracks
    Bool_t          fMergeEMCALClusters; // Merge PHOS  cluster
    Bool_t          fMergePHOSClusters;  // Merge EMCAL cluster
    Bool_t          fMergeEMCALCells;    // Merge PHOS  cluster
    Bool_t          fMergePHOSCells;     // Merge EMCAL cluster
    Bool_t          fMergeEMCALTrigger;    // Merge EMCAL  cluster
    Bool_t          fMergePHOSTrigger;     // Merge PHOS cluster
    Bool_t          fMergeHMPIDrings;      // Merge HMPID rings information
    Bool_t          fFriendsConnected;// Friends are connected
    TFile          *fFileToMerge;     //! File for merging
    TTree          *fTreeToMerge;     //! Tree for merging
    AliAODEvent    *fAODEventToMerge; //! Event for merging
    Int_t           fMergeOffset;     //! Event offset for merging
    TH2F*           fHistStatistics[2]; //! how many events are cut away why {all,bin 0}
    ClassDef(AliAODInputHandler, 4);
};

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