3 #include "EventAlieve.h"
5 #include <Reve/RGTopFrame.h>
7 #include <AliRunLoader.h>
10 #include <AliESDfriend.h>
11 #include <AliMagFMaps.h>
15 #include <TObjString.h>
22 using namespace Alieve;
24 //______________________________________________________________________
30 Event* Alieve::gEvent = 0;
32 Bool_t Alieve::Event::fgUseRunLoader = kTRUE;
33 Bool_t Alieve::Event::fgUseESDTree = kTRUE;
34 Bool_t Alieve::Event::fgAvoidExcOnOpen = kTRUE;
36 AliMagF* Alieve::Event::fgMagField = 0;
39 void Event::Initialize(Bool_t use_runloader, Bool_t use_esd,
40 Bool_t avoid_exc_on_open)
42 static const Exc_t eH("Event::Initialize ");
44 fgUseRunLoader = use_runloader;
45 fgUseESDTree = use_esd;
46 fgAvoidExcOnOpen = avoid_exc_on_open;
49 if(fgUseRunLoader == false && fgUseESDTree == false)
50 throw(eH + "should use at least one data source.");
53 AssertMacro("loadlibs.C");
55 else if(fgUseESDTree) {
56 gSystem->Load("libESD.so");
61 /**************************************************************************/
66 fPath (), fEventId (0),
68 fESDFile (0), fESDTree (0), fESD (0),
69 fESDfriend (0), fESDfriendExists(kFALSE)
72 Event::Event(TString path, Int_t ev) :
73 EventBase("AliEVE Event"),
75 fPath (path), fEventId(-1),
77 fESDFile (0), fESDTree (0), fESD (0),
78 fESDfriend (0), fESDfriendExists(kFALSE)
81 if (ev >= 0) GotoEvent(ev);
84 /**************************************************************************/
88 static const Exc_t eH("Event::Open ");
90 gSystem->ExpandPathName(fPath);
92 fPath = Form("%s/%s", gSystem->WorkingDirectory(), fPath.Data());
96 TString ga_path(Form("%s/galice.root", fPath.Data()));
97 if(gSystem->AccessPathName(ga_path, kReadPermission))
99 if (fgAvoidExcOnOpen) {
100 Warning(eH, "RunLoader not initialized.");
103 throw(eH + "can not read '" + ga_path + "'.");
106 fRunLoader = AliRunLoader::Open(ga_path);
108 throw(eH + "failed opening ALICE run loader from '" + ga_path + "'.");
110 TString alice_path = fPath + "/";
111 fRunLoader->SetDirName(alice_path);
113 if(fRunLoader->LoadgAlice() != 0)
114 throw(eH + "failed loading gAlice.");
115 if(fRunLoader->LoadHeader() != 0)
116 throw(eH + "failed loading header.");
122 TString p(Form("%s/AliESDs.root", fPath.Data()));
123 if(gSystem->AccessPathName(p, kReadPermission))
125 if (fgAvoidExcOnOpen) {
126 Warning(eH, "ESD not initialized.");
129 throw(eH + "can not read '" + p + "'.");
132 fESDFile = new TFile(p);
133 if(fESDFile->IsZombie()) {
134 delete fESDFile; fESDFile = 0;
135 throw(eH + "failed opening ALICE ESD from '" + p + "'.");
138 fESDTree = (TTree*) fESDFile->Get("esdTree");
140 throw(eH + "failed getting the esdTree.");
141 fESDTree->SetBranchAddress("ESD", &fESD);
143 // Check if ESDfriends exists and attach the branch
144 p = Form("%s/AliESDfriends.root", fPath.Data());
145 if(gSystem->AccessPathName(p, kReadPermission) == kFALSE)
147 fESDfriendExists = kTRUE;
148 fESDTree->SetBranchStatus ("ESDfriend*", 1);
149 fESDTree->SetBranchAddress("ESDfriend.", &fESDfriend);
154 SetName(Form("Event %d", fEventId));
158 void Event::GotoEvent(Int_t event)
160 static const Exc_t eH("Event::GotoEvent ");
164 maxEvent = fRunLoader->GetNumberOfEvents() - 1;
166 maxEvent = fESDTree->GetEntries() - 1;
168 throw(eH + "neither RunLoader nor ESD loaded.");
170 if(event < 0 || event > maxEvent)
171 throw(eH + Form("event %d not present, available range [%d, %d].",
172 event, 0, maxEvent));
174 RGTopFrame::RedrawDisabler rd(gReve);
175 gReve->Redraw3D(kFALSE, kTRUE); // Enforce drop of all logicals.
179 SetName(Form("Event %d", fEventId));
183 if(fRunLoader->GetEvent(fEventId) != 0)
184 throw(eH + "failed getting required event.");
188 delete fESD; fESD = 0;
189 delete fESDfriend; fESDfriend = 0;
191 if(fESDTree->GetEntry(fEventId) <= 0)
192 throw(eH + "failed getting required event from ESD.");
194 if (fESDfriendExists)
195 fESD->SetESDfriend(fESDfriend);
198 AfterNewEventLoaded();
204 delete fESD; fESD = 0;
205 delete fESDfriend; fESDfriend = 0;
207 delete fESDTree; fESDTree = 0;
208 delete fESDFile; fESDFile = 0;
212 /**************************************************************************/
214 void Event::AfterNewEventLoaded()
216 TIter next(&fNewEventCommands);
218 while ((o = next())) {
219 TObjString* s = dynamic_cast<TObjString*>(o);
221 gInterpreter->ProcessLine(s->String());
225 void Event::AddNewEventCommand(const Text_t* cmd)
227 fNewEventCommands.Add(new TObjString(cmd));
230 /**************************************************************************/
231 /**************************************************************************/
233 // Static convenience functions.
235 AliRunLoader* Event::AssertRunLoader()
237 static const Exc_t eH("Event::AssertRunLoader ");
240 throw(eH + "ALICE event not ready.");
241 if(gEvent->fRunLoader == 0)
242 throw(eH + "AliRunLoader not initialised.");
243 return gEvent->fRunLoader;
246 AliESD* Event::AssertESD()
248 static const Exc_t eH("Event::AssertESD ");
251 throw(eH + "ALICE event not ready.");
252 if(gEvent->fESD == 0)
253 throw(eH + "AliESD not initialised.");
257 AliESDfriend* Event::AssertESDfriend()
259 static const Exc_t eH("Event::AssertESDfriend ");
262 throw(eH + "ALICE event not ready.");
263 if(gEvent->fESDfriend == 0)
264 throw(eH + "AliESDfriend not initialised.");
265 return gEvent->fESDfriend;
268 AliMagF* Event::AssertMagField()
272 if (gEvent && gEvent->fRunLoader && gEvent->fRunLoader->GetAliRun())
273 fgMagField = gEvent->fRunLoader->GetAliRun()->Field();
275 fgMagField = new AliMagFMaps("Maps","Maps", 1, 1., 10., AliMagFMaps::k5kG);