Corrected protection.
[u/mrichter/AliRoot.git] / STEER / AliMCEventHandler.h
1 // -*- mode: C++ -*-
2 #ifndef ALIMCEVENTHANDLER_H
3 #define ALIMCEVENTHANDLER_H
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7
8 /* $Id$ */
9
10 //-------------------------------------------------------------------------
11 //                          Class AliMCEvent
12 // This class gives access to MC truth during the analysis.
13 // Monte Carlo truth is contained in the kinematics tree (produced particles) and 
14 // the tree of reference hits.
15 //      
16 // Origin: Andreas Morsch, CERN, andreas.morsch@cern.ch 
17 //-------------------------------------------------------------------------
18 #include "AliVEventHandler.h"
19 #include "AliHeader.h"
20 #include <TExMap.h>
21
22 class TFile;
23 class TTree;
24 class TList;
25
26 class TParticle;
27 class TString;
28 class TClonesArray;
29 class TDirectoryFile;
30
31 class AliMCEvent;
32
33
34
35 class AliMCEventHandler : public AliVEventHandler
36 {
37 public:
38
39     enum PreReadMode_t {kNoPreRead = 0, kLmPreRead = 1, kHmPreRead = 2};
40
41     AliMCEventHandler();
42     AliMCEventHandler(const char* name, const char* title);
43     virtual ~AliMCEventHandler();
44     virtual void         SetOutputFileName(const char* /* fname */) {;}
45     virtual const char*  GetOutputFileName() {return 0;}
46     virtual void         SetInputPath(const char* fname); 
47     virtual void         SetInputTree(TTree* /*tree*/) {;}
48     virtual TString*     GetInputPath() const {return fPathName;}
49     virtual Bool_t       Init(Option_t* opt);
50     virtual Bool_t       GetEntry() {return kTRUE;}
51     virtual Bool_t       InitIO(Option_t* opt) {return Init(opt);};
52     virtual Bool_t       Init(TTree* /*tree*/, Option_t* /*opt*/) {return kTRUE;}
53     virtual Bool_t       BeginEvent(Long64_t entry);
54     virtual Bool_t       Notify() { return AliVEventHandler::Notify(); };
55     virtual Bool_t       Notify(const char* path);
56     virtual Bool_t       FinishEvent();
57     virtual Bool_t       Terminate();
58     virtual Bool_t       TerminateIO();
59     virtual void         ResetIO();
60     virtual Bool_t       GetEvent(Int_t iev);
61     virtual void         SetReadTR(Bool_t flag) { fReadTR = flag; }
62     virtual void         AddSubsidiaryHandler(AliMCEventHandler* handler);
63     virtual void         SetNumberOfEventsInContainer(Int_t nev) {fEventsInContainer = nev;}
64     virtual void         SetPreReadMode(PreReadMode_t mode) {fPreReadMode = mode;}
65     //
66     AliMCEvent* MCEvent() const {return fMCEvent;} 
67     TTree*      TreeTR()  const {return fTreeTR;}
68     TTree*      TreeK()   const {return fTreeK;}
69     Int_t       GetParticleAndTR(Int_t i, TParticle*& particle, TClonesArray*& trefs);
70     void        DrawCheck(Int_t i, Int_t search=0);
71     Bool_t      InitOk() {return fInitOk;}
72     // Label manipulation
73     void   SelectParticle(Int_t i);
74     Bool_t IsParticleSelected(Int_t i);
75     void   CreateLabelMap();
76     Int_t  GetNewLabel(Int_t i);
77
78 private:
79     Bool_t      OpenFile(Int_t i);
80     void  VerifySelectedParticles();
81     AliMCEventHandler(const AliMCEventHandler& handler);             
82     AliMCEventHandler& operator=(const AliMCEventHandler& handler);  
83 private:
84     AliMCEvent            *fMCEvent;            //! MC Event
85     TFile                 *fFileE;              //! File with TreeE
86     TFile                 *fFileK;              //! File with TreeK
87     TFile                 *fFileTR;             //! File with TreeTR
88     TTree                 *fTreeE;              //! TreeE  (Event Headers)
89     TTree                 *fTreeK;              //! TreeK  (kinematics tree)
90     TTree                 *fTreeTR;             //! TreeTR (track references tree)
91     TDirectoryFile        *fDirK;               //! Directory for Kine Tree
92     TDirectoryFile        *fDirTR;              //! Directory for TR Tree
93     TExMap                 fParticleSelected;   //! List of selected MC particles for t
94     TExMap                 fLabelMap;           //! Stores the Map of MC (ESDLabel,AODlabel)  
95     Int_t                  fNEvent;             //! Number of events
96     Int_t                  fEvent;              //! Current event
97     TString               *fPathName;           //! Input file path 
98     const Char_t          *fExtension;          //! File name extension 
99     Int_t                  fFileNumber;         //! Input file number
100     Int_t                  fEventsPerFile;      //! Number of events per file
101     Bool_t                 fReadTR;             // determines if TR shall be read
102     Bool_t                 fInitOk;             // Initialization ok
103     TList                 *fSubsidiaryHandlers; //! List of subsidiary MC handlers (for example for Background)
104     Int_t                  fEventsInContainer;  //! Number of events in container class
105     PreReadMode_t          fPreReadMode;        //! Pre reading mode
106     
107     ClassDef(AliMCEventHandler,1)  //MC Truth EventHandler class
108 };
109 #endif 
110