]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/Alieve/EventAlieve.cxx
Fix effc++ warnings.
[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 Event::Event() :
53   EventBase(),
54
55   fPath (), fEventId   (0),
56   fRunLoader (0),
57   fESDFile       (0), fESDTree       (0), fESD       (0),
58   fESDfriendFile (0), fESDfriendTree (0), fESDfriend (0)
59 {}
60
61 Event::Event(TString path, Int_t ev) :
62   EventBase("AliEVE Event"),
63
64   fPath (path), fEventId(ev),
65   fRunLoader (0),
66   fESDFile       (0), fESDTree       (0), fESD       (0),
67   fESDfriendFile (0), fESDfriendTree (0), fESDfriend (0)
68 {
69   Open();
70 }
71
72 /**************************************************************************/
73
74 void Event::Open()
75 {
76   static const Exc_t eH("Event::Open ");
77
78   gSystem->ExpandPathName(fPath);
79   if(fPath[0] != '/')
80     fPath = Form("%s/%s", gSystem->WorkingDirectory(), fPath.Data());
81
82   if(fgUseRunLoader) {
83     TString ga_path(Form("%s/galice.root", fPath.Data()));
84     if(gSystem->AccessPathName(ga_path, kReadPermission))
85       throw(eH + "can not read '" + ga_path + "'.");
86     fRunLoader = AliRunLoader::Open(ga_path);
87     if(!fRunLoader)
88       throw(eH + "failed opening ALICE run loader from '" + ga_path + "'.");
89     {
90       TString alice_path = fPath + "/";
91       fRunLoader->SetDirName(alice_path);
92     }
93     if(fRunLoader->LoadgAlice() != 0)
94       throw(eH + "failed loading gAlice.");
95
96     if(fRunLoader->GetEvent(fEventId) != 0)
97       throw(eH + "failed getting required event.");
98   }
99
100   if(fgUseESDTree) {
101     TString p(Form("%s/AliESDs.root", fPath.Data()));
102     if(gSystem->AccessPathName(p, kReadPermission))
103       throw(eH + "can not read '" + p + "'.");
104     fESDFile = new TFile(p);
105     if(fESDFile->IsZombie()) {
106       delete fESDFile; fESDFile = 0;
107       throw(eH + "failed opening ALICE ESD from '" + p + "'.");
108     }
109
110     fESDTree = (TTree*) fESDFile->Get("esdTree");
111     if(fESDTree == 0)
112       throw(eH + "failed getting the esdTree.");
113     fESDTree->SetBranchAddress("ESD", &fESD);
114     if(fESDTree->GetEntry(fEventId) <= 0)
115       throw(eH + "failed getting required event from ESD.");
116
117     // Check if ESDfriends exists and load it
118     p = Form("%s/AliESDfriends.root", fPath.Data());
119     if(gSystem->AccessPathName(p, kReadPermission) == kFALSE) {
120       fESDfriendFile = new TFile(p);
121       if(fESDfriendFile->IsZombie()) {
122         delete fESDfriendFile; fESDfriendFile = 0;
123         throw(eH + "failed opening ALICE ESDfriend from '" + p + "'.");
124       }
125
126       fESDfriendTree = (TTree*) fESDfriendFile->Get("esdFriendTree");
127       if(fESDfriendTree == 0)
128         throw(eH + "failed getting the esdFriendTree.");
129       fESDfriendTree->SetBranchAddress("ESDfriend", &fESDfriend);
130       if(fESDfriendTree->GetEntry(fEventId) <= 0)
131         throw(eH + "failed getting required event from ESDfriend.");
132
133       fESD->SetESDfriend(fESDfriend);
134     }
135   }
136
137   SetName(Form("Event %d", fEventId));
138   SetTitle(fPath);
139 }
140
141 void Event::GotoEvent(Int_t event)
142 {
143   static const Exc_t eH("Event::GotoEvent ");
144
145   if(fgUseRunLoader && fRunLoader == 0)
146     throw(eH + "RunLoader not initialized.");
147
148   if(fgUseESDTree && fESDTree == 0)
149     throw(eH + "ESDTree not initialized.");
150
151   Int_t maxEvent = 0;
152   if(fgUseRunLoader)
153     maxEvent = fRunLoader->GetNumberOfEvents() - 1;
154   else if(fgUseESDTree)
155     maxEvent = fESDTree->GetEntries() - 1;
156
157   if(event < 0 || event > maxEvent)
158     throw(eH + Form("event %d not present, available range [%d, %d].",
159                     event, 0, maxEvent));
160
161   DestroyElements();
162   fEventId = event;
163   SetName(Form("Event %d", fEventId));
164   UpdateItems();
165
166   if(fgUseRunLoader) {
167     if(fRunLoader->GetEvent(fEventId) != 0)
168       throw(eH + "failed getting required event.");
169   }
170
171   if(fgUseESDTree) {
172     if(fESDTree->GetEntry(fEventId) <= 0)
173       throw(eH + "failed getting required event from ESD.");
174
175     if(fESDfriendTree != 0) {
176       if(fESDfriendTree->GetEntry(fEventId) <= 0)
177         throw(eH + "failed getting required event from ESDfriend.");
178
179       fESD->SetESDfriend(fESDfriend);
180     }
181   }
182 }
183
184 void Event::Close()
185 {
186   
187 }
188
189 /**************************************************************************/
190 /**************************************************************************/
191
192 // Static convenience functions.
193
194 AliRunLoader* Event::AssertRunLoader()
195 {
196   static const Exc_t eH("Event::AssertRunLoader ");
197
198   if(gEvent == 0)
199     throw(eH + "ALICE event not ready.");
200   if(gEvent->fRunLoader == 0)
201     throw(eH + "AliRunLoader not initialised.");
202   return gEvent->fRunLoader;
203 }
204
205 AliESD* Event::AssertESD()
206 {
207   static const Exc_t eH("Event::AssertESD ");
208
209   if(gEvent == 0)
210     throw(eH + "ALICE event not ready.");
211   if(gEvent->fESD == 0)
212     throw(eH + "AliESD not initialised.");
213   return gEvent->fESD;
214 }
215
216 AliESDfriend* Event::AssertESDfriend()
217 {
218   static const Exc_t eH("Event::AssertESDfriend ");
219
220   if(gEvent == 0)
221     throw(eH + "ALICE event not ready.");
222   if(gEvent->fESDfriend == 0)
223     throw(eH + "AliESDfriend not initialised.");
224   return gEvent->fESDfriend;
225 }