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

/* $Id$ */

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

#include "AliVEventHandler.h"
#include <TTree.h>


class AliVCuts;
class AliRunTag;
class AliEventTag;
class AliPIDResponse;
class AliMCEvent;

class AliInputEventHandler : public AliVEventHandler {

 public:
 enum EInputHandlerFlags {
    kUserCallSelectionMask = BIT(14), // Watch out for defining base class bits
    kCheckStatistics       = BIT(15),
    kNeedField             = BIT(16)
 };
    AliInputEventHandler();
    AliInputEventHandler(const char* name, const char* title);
    virtual ~AliInputEventHandler();
    virtual void         SetInputFileName(const char* fname);
    virtual const char  *GetInputFileName() const                     {return fInputFileName;}
    virtual void         SetOutputFileName(const char* /*fname*/) {;}
    virtual const char  *GetOutputFileName() const                    {return 0;}
    virtual Bool_t       Init(Option_t* opt) {if(fMixingHandler) fMixingHandler->Init(opt);return kTRUE;}
    virtual Bool_t       Init(TTree* tree, Option_t* opt) {if(fMixingHandler) fMixingHandler->Init(tree,opt);return kTRUE;}
    virtual Bool_t       GetEntry() {if(fMixingHandler) fMixingHandler->GetEntry(); return kTRUE;}
    virtual Bool_t       BeginEvent(Long64_t entry) {if(fMixingHandler) fMixingHandler->BeginEvent(entry);return kTRUE;}
    virtual Bool_t       NeedField()     const {return TObject::TestBit(kNeedField);}
    //
    virtual Bool_t       Notify()      { return AliVEventHandler::Notify();}
    virtual Bool_t       Notify(const char *path) {if(fMixingHandler) fMixingHandler->Notify(path);return kTRUE;}
    virtual Bool_t       FinishEvent() {if(fMixingHandler) fMixingHandler->FinishEvent();return kTRUE;}        
    virtual Bool_t       Terminate()   {if(fMixingHandler) fMixingHandler->Terminate();return kTRUE;}
    virtual Bool_t       TerminateIO() {if(fMixingHandler) fMixingHandler->TerminateIO();return kTRUE;}
    // Setters
    virtual void         SetInputTree(TTree* tree)                    {fTree = tree;}
    virtual void         SetEventSelection(AliVCuts* cuts)            {if (fEventCuts) Changed(); fEventCuts = cuts;}
    virtual void         SetUserCallSelectionMask(Bool_t flag=kTRUE)  {TObject::SetBit(kUserCallSelectionMask,flag);}
    virtual void         SetCheckStatistics(Bool_t flag=kTRUE)        {Changed(); TObject::SetBit(kCheckStatistics,flag);}
    virtual void         SetNeedField(Bool_t flag=kTRUE)              {TObject::SetBit(kNeedField,flag);} 
    //
    void SetInactiveBranches(const char* branches) {Changed(); fBranches   = branches;}
    void SetActiveBranches  (const char* branches) {Changed(); fBranchesOn = branches;}
     // Getters
    virtual AliVEvent   *GetEvent()        const                      {return 0;}
    virtual const AliEventTag   *GetEventTag() const                  {return 0;}
    virtual AliRunTag   *GetRunTag()       const                      {return 0;}
    // Get the statistics object (currently TH2). Option can be BIN0.
    virtual TObject     *GetStatistics(Option_t *option="") const;
    virtual Option_t    *GetAnalysisType() const                      {return 0;}
    virtual TTree       *GetTree( )        const                      {return fTree;}
    virtual AliVCuts    *GetEventSelection() const                    {return fEventCuts;}
    virtual Long64_t     GetReadEntry()    const;
    virtual Bool_t       IsCheckStatistics() const                    {return TObject::TestBit(kCheckStatistics);}
    virtual Bool_t       IsUserCallSelectionMask() const              {return TObject::TestBit(kUserCallSelectionMask);}
    virtual Bool_t       NewEvent()
	{Bool_t ne = fNewEvent; fNewEvent = kFALSE; return ne;}
    virtual UInt_t       IsEventSelected() 
        {return fIsSelectedResult;}
    virtual AliMCEvent*  MCEvent() const			      {return 0;}
    TList       *GetUserInfo() const                         {return fUserInfo;}
    // Mixing
    void SetMixingHandler(AliInputEventHandler* mixing) {Changed(); fMixingHandler = mixing;}
    AliInputEventHandler* MixingHandler()               {return fMixingHandler;}
    // Parent Handler
    void SetParentHandler(AliInputEventHandler* parent) {Changed(); fParentHandler = parent;}
    AliInputEventHandler* ParentHandler()               {return fParentHandler;}

    //PID response
    virtual AliPIDResponse* GetPIDResponse() {return 0x0;}
    virtual void CreatePIDResponse(Bool_t /*isMC*/=kFALSE) {;}
  
 protected:
    void SwitchOffBranches() const;
    void SwitchOnBranches()  const;
 private:
    AliInputEventHandler(const AliInputEventHandler& handler);             
    AliInputEventHandler& operator=(const AliInputEventHandler& handler);  
 protected:
    TTree          *fTree;         //! Pointer to the tree
    TString         fBranches;     //  List of branches to be switched off (separated by space)
    TString         fBranchesOn;   //  List of branches to be switched on  (separated by space)
    TString         fInputFileName; // Name of the input file
    Bool_t          fNewEvent;     //  New event flag 
    AliVCuts*       fEventCuts;    //  Cuts on the event level
    UInt_t          fIsSelectedResult; //  Selection result
    AliInputEventHandler* fMixingHandler; // Optionla plugin for mixing
    AliInputEventHandler* fParentHandler; // optional pointer to parent handlers (used in AliMultiInputEventHandler)
    TList           *fUserInfo;     //! transient user info for current tree
    ClassDef(AliInputEventHandler, 7);
};

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