Added V0A23 (V0 rings 2-3), V0C01 (V0 rings 0-1) and V0S = V0A23+V0C01
[u/mrichter/AliRoot.git] / STEER / STEERBase / AliInputEventHandler.h
1 #ifndef ALIINPUTEVENTHANDLER_H
2 #define ALIINPUTEVENTHANDLER_H
3 /* Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
7
8 //-------------------------------------------------------------------------
9 //     Input Handler realisation of the AliVEventHandler interface
10 //     Author: Andreas Morsch, CERN
11 //-------------------------------------------------------------------------
12
13 #include "AliVEventHandler.h"
14 #include <TTree.h>
15
16
17 class AliVEvent;
18 class AliVCuts;
19 class AliRunTag;
20 class AliEventTag;
21 class AliPIDResponse;
22 class AliMCEvent;
23
24 class AliInputEventHandler : public AliVEventHandler {
25
26  public:
27  enum EInputHandlerFlags {
28     kUserCallSelectionMask = BIT(14), // Watch out for defining base class bits
29     kCheckStatistics       = BIT(15),
30     kNeedField             = BIT(16)
31  };
32     AliInputEventHandler();
33     AliInputEventHandler(const char* name, const char* title);
34     virtual ~AliInputEventHandler();
35     virtual void         SetInputFileName(const char* fname);
36     virtual const char  *GetInputFileName() const                     {return fInputFileName;}
37     virtual void         SetOutputFileName(const char* /*fname*/) {;}
38     virtual const char  *GetOutputFileName() const                    {return 0;}
39     virtual Bool_t       Init(Option_t* opt) {if(fMixingHandler) fMixingHandler->Init(opt);return kTRUE;}
40     virtual Bool_t       Init(TTree* tree, Option_t* opt) {if(fMixingHandler) fMixingHandler->Init(tree,opt);return kTRUE;}
41     virtual Bool_t       GetEntry() {if(fMixingHandler) fMixingHandler->GetEntry(); return kTRUE;}
42     virtual Bool_t       BeginEvent(Long64_t entry) {if(fMixingHandler) fMixingHandler->BeginEvent(entry);return kTRUE;}
43     virtual Bool_t       NeedField()     const {return TObject::TestBit(kNeedField);}
44     //
45     virtual Bool_t       Notify()      { return AliVEventHandler::Notify();}
46     virtual Bool_t       Notify(const char *path) {if(fMixingHandler) fMixingHandler->Notify(path);return kTRUE;}
47     virtual Bool_t       FinishEvent() {if(fMixingHandler) fMixingHandler->FinishEvent();return kTRUE;}        
48     virtual Bool_t       Terminate()   {if(fMixingHandler) fMixingHandler->Terminate();return kTRUE;}
49     virtual Bool_t       TerminateIO() {if(fMixingHandler) fMixingHandler->TerminateIO();return kTRUE;}
50     // Setters
51     virtual void         SetInputTree(TTree* tree)                    {fTree = tree;}
52     virtual void         SetEventSelection(AliVCuts* cuts)            {if (fEventCuts) Changed(); fEventCuts = cuts;}
53     virtual void         SetUserCallSelectionMask(Bool_t flag=kTRUE)  {TObject::SetBit(kUserCallSelectionMask,flag);}
54     virtual void         SetCheckStatistics(Bool_t flag=kTRUE)        {Changed(); TObject::SetBit(kCheckStatistics,flag);}
55     virtual void         SetNeedField(Bool_t flag=kTRUE)              {TObject::SetBit(kNeedField,flag);} 
56     //
57     void SetInactiveBranches(const char* branches) {Changed(); fBranches   = branches;}
58     void SetActiveBranches  (const char* branches) {Changed(); fBranchesOn = branches;}
59      // Getters
60     virtual AliVEvent   *GetEvent()        const                      {return 0;}
61     virtual const AliEventTag   *GetEventTag() const                  {return 0;}
62     virtual AliRunTag   *GetRunTag()       const                      {return 0;}
63     // Get the statistics object (currently TH2). Option can be BIN0.
64     virtual TObject     *GetStatistics(Option_t *option="") const;
65     virtual Option_t    *GetAnalysisType() const                      {return 0;}
66     virtual TTree       *GetTree( )        const                      {return fTree;}
67     virtual AliVCuts    *GetEventSelection() const                    {return fEventCuts;}
68     virtual Long64_t     GetReadEntry()    const;
69     virtual Bool_t       IsCheckStatistics() const                    {return TObject::TestBit(kCheckStatistics);}
70     virtual Bool_t       IsUserCallSelectionMask() const              {return TObject::TestBit(kUserCallSelectionMask);}
71     virtual Bool_t       NewEvent()
72         {Bool_t ne = fNewEvent; fNewEvent = kFALSE; return ne;}
73     virtual UInt_t       IsEventSelected() 
74         {return fIsSelectedResult;}
75     virtual AliMCEvent*  MCEvent() const                              {return 0;}
76     TList       *GetUserInfo() const                         {return fUserInfo;}
77     // Mixing
78     void SetMixingHandler(AliInputEventHandler* mixing) {Changed(); fMixingHandler = mixing;}
79     AliInputEventHandler* MixingHandler()               {return fMixingHandler;}
80     // Parent Handler
81     void SetParentHandler(AliInputEventHandler* parent) {Changed(); fParentHandler = parent;}
82     AliInputEventHandler* ParentHandler()               {return fParentHandler;}
83
84     //PID response
85     virtual AliPIDResponse* GetPIDResponse() {return 0x0;}
86     virtual void CreatePIDResponse(Bool_t /*isMC*/=kFALSE) {;}
87   
88  protected:
89     void SwitchOffBranches() const;
90     void SwitchOnBranches()  const;
91  private:
92     AliInputEventHandler(const AliInputEventHandler& handler);             
93     AliInputEventHandler& operator=(const AliInputEventHandler& handler);  
94  protected:
95     TTree          *fTree;         //! Pointer to the tree
96     TString         fBranches;     //  List of branches to be switched off (separated by space)
97     TString         fBranchesOn;   //  List of branches to be switched on  (separated by space)
98     TString         fInputFileName; // Name of the input file
99     Bool_t          fNewEvent;     //  New event flag 
100     AliVCuts*       fEventCuts;    //  Cuts on the event level
101     UInt_t          fIsSelectedResult; //  Selection result
102     AliInputEventHandler* fMixingHandler; // Optionla plugin for mixing
103     AliInputEventHandler* fParentHandler; // optional pointer to parent handlers (used in AliMultiInputEventHandler)
104     TList           *fUserInfo;     //! transient user info for current tree
105     ClassDef(AliInputEventHandler, 7);
106 };
107
108 #endif