]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/Alieve/EventAlieve.cxx
64f58ab378b8740fc10261b79bd37e3a7e5e640c
[u/mrichter/AliRoot.git] / EVE / Alieve / EventAlieve.cxx
1 // $Header$
2
3 #include "EventAlieve.h"
4 #include <Reve/Reve.h>
5
6 #include <AliRunLoader.h>
7 #include <AliESD.h>
8 #include <AliESDfriend.h>
9
10 #include <TFile.h>
11 #include <TTree.h>
12
13 #include <TROOT.h>
14 #include <TSystem.h>
15
16 using namespace Reve;
17 using namespace Alieve;
18
19 //______________________________________________________________________
20 // Event
21 //
22
23 ClassImp(Event)
24
25 Event* Alieve::gEvent = 0;
26
27 Bool_t Alieve::Event::fgUseRunLoader = true;
28 Bool_t Alieve::Event::fgUseESDTree   = true;
29
30 void Event::Initialize(Bool_t use_runloader, Bool_t use_esd)
31 {
32   static const Exc_t eH("Event::Initialize ");
33
34   fgUseRunLoader = use_runloader;
35   fgUseESDTree   = use_esd;
36
37   /*
38   if(fgUseRunLoader == false && fgUseESDTree == false)
39     throw(eH + "should use at least one data source.");
40
41   if(fgUseRunLoader) {
42     AssertMacro("loadlibs.C");
43   }
44   else if(fgUseESDTree) {
45     gSystem->Load("libESD.so");
46   }
47   */
48 }
49
50 /**************************************************************************/
51
52 void Event::Init()
53 {
54   fRunLoader = 0;
55   fESDFile   = 0;
56   fESDTree   = 0;
57   fESD       = 0;
58   fESDfriendFile = 0;
59   fESDfriendTree = 0;
60   fESDfriend     = 0;
61 }
62
63 Event::Event() : TNamed(), fEventId(0)
64 {
65   Init();
66 }
67
68 Event::Event(TString path, Int_t ev) : fPath(path), fEventId(ev)
69 {
70   Init();
71   Open();
72 }
73
74 /**************************************************************************/
75
76 void Event::Open()
77 {
78   static const Exc_t eH("Event::Open ");
79
80   gSystem->ExpandPathName(fPath);
81   if(fPath[0] != '/')
82     fPath = Form("%s/%s", gSystem->WorkingDirectory(), fPath.Data());
83
84   if(fgUseRunLoader) {
85     TString ga_path(Form("%s/galice.root", fPath.Data()));
86     if(gSystem->AccessPathName(ga_path, kReadPermission))
87       throw(eH + "can not read '" + ga_path + "'.");
88     fRunLoader = AliRunLoader::Open(ga_path);
89     if(!fRunLoader)
90       throw(eH + "failed opening ALICE run loader from '" + ga_path + "'.");
91     {
92       TString alice_path = fPath + "/";
93       fRunLoader->SetDirName(alice_path);
94     }
95     if(fRunLoader->LoadgAlice() != 0) {
96       throw(eH + "failed loading gAlice.");
97     }
98
99     if(fRunLoader->GetEvent(fEventId) != 0) {
100       throw(eH + "failed getting required event.");
101     }
102   }
103
104   if(fgUseESDTree) {
105     TString p(Form("%s/AliESDs.root", fPath.Data()));
106     if(gSystem->AccessPathName(p, kReadPermission))
107       throw(eH + "can not read '" + p + "'.");
108     fESDFile = new TFile(p);
109     if(fESDFile->IsZombie()) {
110       delete fESDFile; fESDFile = 0;
111       throw(eH + "failed opening ALICE ESD from '" + p + "'.");
112     }
113
114     fESDTree = (TTree*) fESDFile->Get("esdTree");
115     if(fESDTree == 0)
116       throw(eH + "failed getting the esdTree.");
117     fESDTree->SetBranchAddress("ESD", &fESD);
118     if(fESDTree->GetEntry(fEventId) <= 0)
119       throw(eH + "failed getting required event from ESD.");
120
121     // Check if ESDfriends exists and load it
122     p = Form("%s/AliESDfriends.root", fPath.Data());
123     if(gSystem->AccessPathName(p, kReadPermission) == kFALSE) {
124       fESDfriendFile = new TFile(p);
125       if(fESDfriendFile->IsZombie()) {
126         delete fESDfriendFile; fESDfriendFile = 0;
127         throw(eH + "failed opening ALICE ESDfriend from '" + p + "'.");
128       }
129
130       fESDfriendTree = (TTree*) fESDfriendFile->Get("esdFriendTree");
131       if(fESDfriendTree == 0)
132         throw(eH + "failed getting the esdFriendTree.");
133       fESDfriendTree->SetBranchAddress("ESDfriend", &fESDfriend);
134       if(fESDfriendTree->GetEntry(fEventId) <= 0)
135         throw(eH + "failed getting required event from ESDfriend.");
136
137       fESD->SetESDfriend(fESDfriend);
138     }
139   }
140
141   SetName(Form("Event%d", fEventId));
142   SetTitle(fPath);
143 }
144
145 void Event::Close()
146 {
147   
148 }
149
150 /**************************************************************************/
151 /**************************************************************************/
152
153 // Static convenience functions.
154
155 AliRunLoader* Event::AssertRunLoader()
156 {
157   static const Exc_t eH("Event::AssertRunLoader ");
158
159   if(gEvent == 0)
160     throw(eH + "ALICE event not ready.");
161   if(gEvent->fRunLoader == 0)
162     throw(eH + "AliRunLoader not initialised.");
163   return gEvent->fRunLoader;
164 }
165
166 AliESD* Event::AssertESD()
167 {
168   static const Exc_t eH("Event::AssertESD ");
169
170   if(gEvent == 0)
171     throw(eH + "ALICE event not ready.");
172   if(gEvent->fESD == 0)
173     throw(eH + "AliESD not initialised.");
174   return gEvent->fESD;
175 }
176
177 AliESDfriend* Event::AssertESDfriend()
178 {
179   static const Exc_t eH("Event::AssertESDfriend ");
180
181   if(gEvent == 0)
182     throw(eH + "ALICE event not ready.");
183   if(gEvent->fESDfriend == 0)
184     throw(eH + "AliESDfriend not initialised.");
185   return gEvent->fESDfriend;
186 }