]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/AliAODHandler.h
6692201dbd849e748eb8e7864504e7793d770065
[u/mrichter/AliRoot.git] / STEER / AliAODHandler.h
1 #ifndef ALIAODHANDLER_H
2 #define ALIAODHANDLER_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 //     Implementation of the Event Handler Interface for AOD
10 //     Author: Andreas Morsch, CERN
11 //-------------------------------------------------------------------------
12
13 #include "AliVEventHandler.h"
14
15 class AliAODEvent;
16 class TFile;
17 class TTree;
18 class TObjArray;
19 class AliMCEventHandler;
20 class AliAODMCHeader;
21 class AliAODExtension;
22 class AliGenEventHeader;
23
24
25
26 class AliAODHandler : public AliVEventHandler {
27     
28  public:
29     AliAODHandler();
30     AliAODHandler(const char* name, const char* title);
31     virtual ~AliAODHandler();
32     virtual void         SetOutputFileName(const char* fname);
33     virtual const char*  GetOutputFileName();
34     virtual Bool_t       Init(Option_t* option);
35     virtual Bool_t       Init(TTree* /*tree*/, Option_t* /*option*/)  {return kTRUE;}
36     virtual Bool_t       BeginEvent(Long64_t /*entry*/){return kTRUE;}
37     virtual Bool_t       Notify() { return AliVEventHandler::Notify(); };
38     virtual Bool_t       Notify(const char * /* path */) {return kTRUE;}
39     virtual Bool_t       FinishEvent();
40     virtual Bool_t       Terminate();
41     virtual Bool_t       TerminateIO();
42     //
43     virtual void         SetCreateNonStandardAOD()   {fIsStandard = kFALSE;}
44     virtual void         SetFillAOD(Bool_t b)      {fFillAOD = b;}
45     virtual void         SetNeedsHeaderReplication()             {fNeedsHeaderReplication             = kTRUE;}
46     virtual void         SetNeedsTracksBranchReplication()       {fNeedsTracksBranchReplication       = kTRUE;}
47     virtual void         SetNeedsVerticesBranchReplication()     {fNeedsVerticesBranchReplication     = kTRUE;}
48     virtual void         SetNeedsV0sBranchReplication()          {fNeedsV0sBranchReplication          = kTRUE;}
49     virtual void         SetNeedsTrackletsBranchReplication()    {fNeedsTrackletsBranchReplication    = kTRUE;}
50     virtual void         SetNeedsPMDClustersBranchReplication()  {fNeedsPMDClustersBranchReplication  = kTRUE;}
51     virtual void         SetNeedsJetsBranchReplication()         {fNeedsJetsBranchReplication         = kTRUE;}
52     virtual void         SetNeedsFMDClustersBranchReplication()  {fNeedsFMDClustersBranchReplication  = kTRUE;}
53     virtual void         SetNeedsCaloClustersBranchReplication() {fNeedsCaloClustersBranchReplication = kTRUE;}
54     virtual void         SetNeedsMCParticlesBranchReplication()  {fNeedsCaloClustersBranchReplication = kTRUE;}
55     virtual void         SetAODIsReplicated() {fAODIsReplicated = kTRUE;}
56     //
57     AliAODEvent*         GetAOD()  {return fAODEvent;}
58     virtual TTree*       GetTree() const {return fTreeA;}
59     TObjArray*           GetExtensions() const {return fExtensions;}
60     void                 CreateTree(Int_t flag);
61     void                 FillTree();
62     void                 AddAODtoTreeUserInfo();
63     void                 AddBranch(const char* cname, void* addobj, const char *fname="");
64     AliAODExtension*     AddExtension(const char *filename, const char *title="");                 
65     Bool_t               IsStandard()                         const {return fIsStandard;}
66     Bool_t               GetFillAOD()                         const {return fFillAOD;} 
67     Bool_t               NeedsHeaderReplication()             const {return  fNeedsHeaderReplication;}
68     Bool_t               NeedsTracksBranchReplication()       const {return  fNeedsTracksBranchReplication;}
69     Bool_t               NeedsVerticesBranchReplication()     const {return  fNeedsVerticesBranchReplication;}
70     Bool_t               NeedsV0sBranchReplication()          const {return  fNeedsV0sBranchReplication;}
71     Bool_t               NeedsTrackletsBranchReplication()    const {return  fNeedsTrackletsBranchReplication;}
72     Bool_t               NeedsPMDClustersBranchReplication()  const {return  fNeedsPMDClustersBranchReplication;}
73     Bool_t               NeedsJetsBranchReplication()         const {return  fNeedsJetsBranchReplication;}
74     Bool_t               NeedsFMDClustersBranchReplication()  const {return  fNeedsFMDClustersBranchReplication;}
75     Bool_t               NeedsCaloClustersBranchReplication() const {return  fNeedsCaloClustersBranchReplication;}
76     Bool_t               NeedsMCParticlesBranchReplication()  const {return  fNeedsMCParticlesBranchReplication;}
77     Bool_t               AODIsReplicated()                    const {return  fAODIsReplicated;}
78     //
79     void                 SetInputTree(TTree* /*tree*/) {;}
80     void                 SetMCEventHandler(AliMCEventHandler* mcH) {fMCEventH = mcH;} // For internal use
81     void StoreMCParticles(); // Store MC particles, only to be called from AliAnalyisTaskMCParticleFilter
82
83  private:
84     void SetMCHeaderInfo(AliAODMCHeader *mcHeader,AliGenEventHeader *genHeader); // Utility function t catch different types of eventheaders
85     AliAODHandler(const AliAODHandler&);             // Not implemented
86     AliAODHandler& operator=(const AliAODHandler&);  // Not implemented
87  private:
88     Bool_t                   fIsStandard;                         // Flag for standard aod creation
89     Bool_t                   fFillAOD;                            // Flag for filling of the AOD tree at the end (all or nothing)
90     Bool_t                   fNeedsHeaderReplication;             // Flag for header replication
91     Bool_t                   fNeedsTracksBranchReplication;       // Flag for tracks replication
92     Bool_t                   fNeedsVerticesBranchReplication;     // Flag for vertices replication
93     Bool_t                   fNeedsV0sBranchReplication;          // Flag for V0s replication
94     Bool_t                   fNeedsTrackletsBranchReplication;    // Flag for Tracklets replication
95     Bool_t                   fNeedsPMDClustersBranchReplication;  // Flag for PMDClusters replication
96     Bool_t                   fNeedsJetsBranchReplication;         // Flag for Jets replication
97     Bool_t                   fNeedsFMDClustersBranchReplication;  // Flag for FMDClusters replication
98     Bool_t                   fNeedsCaloClustersBranchReplication; // Flag for CaloClusters replication
99     Bool_t                   fNeedsMCParticlesBranchReplication;  // Flag for MCParticles replication
100     Bool_t                   fAODIsReplicated;                    // Flag true if replication as been executed
101     AliAODEvent             *fAODEvent;               //! Pointer to the AOD event
102     AliMCEventHandler       *fMCEventH;               //! Pointer to mc event handler needed not to depend on the manager
103     TTree                   *fTreeA;                  //! tree for AOD persistency
104     TFile                   *fFileA;                  //! Output file
105     TString                  fFileName;               //  Output file name
106     TObjArray               *fExtensions;             //  List of extensions
107     ClassDef(AliAODHandler, 4)
108 };
109
110 //-------------------------------------------------------------------------
111 //     Support class for AOD extensions. This is created by the user analysis
112 //     that requires a separate file for some AOD branches. The name of the 
113 //     AliAODExtension object is the file name where the AOD branches will be
114 //     stored.
115 //     Author: Andrei Gheata, CERN
116 //-------------------------------------------------------------------------
117
118 class AliAODExtension : public TNamed {
119     
120  public:
121     AliAODExtension() : TNamed(), fAODEvent(0), fTreeE(0), fFileE(0)   {;}
122     AliAODExtension(const char* name, const char* title) : TNamed(name,title), fAODEvent(0), fTreeE(0), fFileE(0) {;}
123     virtual ~AliAODExtension();
124     void                 AddBranch(const char* cname, void* addobj);
125     const char*          GetOutputFileName() const {return TNamed::GetName();}
126     AliAODEvent*         GetAOD() const            {return fAODEvent;}
127     TTree*               GetTree() const           {return fTreeE;}
128     Bool_t               Init(Option_t *option);
129     void                 SetOutputFileName(const char* fname) {TNamed::SetName(fname);}
130     Bool_t               TerminateIO();
131  private:
132     AliAODExtension(const AliAODExtension&);             // Not implemented
133     AliAODExtension& operator=(const AliAODExtension&);  // Not implemented
134
135  private:
136     AliAODEvent             *fAODEvent;               //! Pointer to the AOD event
137     TTree                   *fTreeE;                  //! tree for AOD persistency
138     TFile                   *fFileE;                  //! Output file
139     ClassDef(AliAODExtension, 1)                      // Support for extra AOD branches in a separate AOD file
140 };
141 #endif