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 //______________________________________________________________________
27 // Provide interface for loading and navigating standard AliRoot data
28 // (AliRunLoader) and ESDs.
30 // Missing support for raw-data. For now this is handled individually
31 // by each sub-detector.
36 Event* Alieve::gEvent = 0;
38 Bool_t Alieve::Event::fgUseRunLoader = kTRUE;
39 Bool_t Alieve::Event::fgUseESDTree = kTRUE;
40 Bool_t Alieve::Event::fgAvoidExcOnOpen = kTRUE;
42 AliMagF* Alieve::Event::fgMagField = 0;
45 void Event::Initialize(Bool_t use_runloader, Bool_t use_esd,
46 Bool_t avoid_exc_on_open)
48 static const Exc_t eH("Event::Initialize ");
50 fgUseRunLoader = use_runloader;
51 fgUseESDTree = use_esd;
52 fgAvoidExcOnOpen = avoid_exc_on_open;
55 if(fgUseRunLoader == false && fgUseESDTree == false)
56 throw(eH + "should use at least one data source.");
59 AssertMacro("loadlibs.C");
61 else if(fgUseESDTree) {
62 gSystem->Load("libESD.so");
67 /**************************************************************************/
72 fPath (), fEventId (0),
74 fESDFile (0), fESDTree (0), fESD (0),
75 fESDfriend (0), fESDfriendExists(kFALSE)
78 Event::Event(TString path, Int_t ev) :
79 EventBase("AliEVE Event"),
81 fPath (path), fEventId(-1),
83 fESDFile (0), fESDTree (0), fESD (0),
84 fESDfriend (0), fESDfriendExists(kFALSE)
87 if (ev >= 0) GotoEvent(ev);
90 /**************************************************************************/
94 static const Exc_t eH("Event::Open ");
96 gSystem->ExpandPathName(fPath);
98 fPath = Form("%s/%s", gSystem->WorkingDirectory(), fPath.Data());
102 TString ga_path(Form("%s/galice.root", fPath.Data()));
103 if(gSystem->AccessPathName(ga_path, kReadPermission))
105 if (fgAvoidExcOnOpen) {
106 Warning(eH, "RunLoader not initialized.");
109 throw(eH + "can not read '" + ga_path + "'.");
112 fRunLoader = AliRunLoader::Open(ga_path);
114 throw(eH + "failed opening ALICE run loader from '" + ga_path + "'.");
116 TString alice_path = fPath + "/";
117 fRunLoader->SetDirName(alice_path);
119 if(fRunLoader->LoadgAlice() != 0)
120 throw(eH + "failed loading gAlice.");
121 if(fRunLoader->LoadHeader() != 0)
122 throw(eH + "failed loading header.");
128 TString p(Form("%s/AliESDs.root", fPath.Data()));
129 if(gSystem->AccessPathName(p, kReadPermission))
131 if (fgAvoidExcOnOpen) {
132 Warning(eH, "ESD not initialized.");
135 throw(eH + "can not read '" + p + "'.");
138 fESDFile = new TFile(p);
139 if(fESDFile->IsZombie()) {
140 delete fESDFile; fESDFile = 0;
141 throw(eH + "failed opening ALICE ESD from '" + p + "'.");
144 fESDTree = (TTree*) fESDFile->Get("esdTree");
146 throw(eH + "failed getting the esdTree.");
147 fESDTree->SetBranchAddress("ESD", &fESD);
149 // Check if ESDfriends exists and attach the branch
150 p = Form("%s/AliESDfriends.root", fPath.Data());
151 if(gSystem->AccessPathName(p, kReadPermission) == kFALSE)
153 fESDfriendExists = kTRUE;
154 fESDTree->SetBranchStatus ("ESDfriend*", 1);
155 fESDTree->SetBranchAddress("ESDfriend.", &fESDfriend);
160 SetName(Form("Event %d", fEventId));
164 void Event::GotoEvent(Int_t event)
166 static const Exc_t eH("Event::GotoEvent ");
170 maxEvent = fRunLoader->GetNumberOfEvents() - 1;
172 maxEvent = fESDTree->GetEntries() - 1;
174 throw(eH + "neither RunLoader nor ESD loaded.");
176 if(event < 0 || event > maxEvent)
177 throw(eH + Form("event %d not present, available range [%d, %d].",
178 event, 0, maxEvent));
180 RGTopFrame::RedrawDisabler rd(gReve);
181 gReve->Redraw3D(kFALSE, kTRUE); // Enforce drop of all logicals.
185 SetName(Form("Event %d", fEventId));
189 if(fRunLoader->GetEvent(fEventId) != 0)
190 throw(eH + "failed getting required event.");
194 delete fESD; fESD = 0;
195 delete fESDfriend; fESDfriend = 0;
197 if(fESDTree->GetEntry(fEventId) <= 0)
198 throw(eH + "failed getting required event from ESD.");
200 if (fESDfriendExists)
201 fESD->SetESDfriend(fESDfriend);
204 AfterNewEventLoaded();
210 delete fESD; fESD = 0;
211 delete fESDfriend; fESDfriend = 0;
213 delete fESDTree; fESDTree = 0;
214 delete fESDFile; fESDFile = 0;
218 /**************************************************************************/
220 void Event::AfterNewEventLoaded()
222 TIter next(&fNewEventCommands);
224 while ((o = next())) {
225 TObjString* s = dynamic_cast<TObjString*>(o);
227 gInterpreter->ProcessLine(s->String());
231 void Event::AddNewEventCommand(const Text_t* cmd)
233 fNewEventCommands.Add(new TObjString(cmd));
236 /**************************************************************************/
237 /**************************************************************************/
239 // Static convenience functions.
241 AliRunLoader* Event::AssertRunLoader()
243 static const Exc_t eH("Event::AssertRunLoader ");
246 throw(eH + "ALICE event not ready.");
247 if(gEvent->fRunLoader == 0)
248 throw(eH + "AliRunLoader not initialised.");
249 return gEvent->fRunLoader;
252 AliESD* Event::AssertESD()
254 static const Exc_t eH("Event::AssertESD ");
257 throw(eH + "ALICE event not ready.");
258 if(gEvent->fESD == 0)
259 throw(eH + "AliESD not initialised.");
263 AliESDfriend* Event::AssertESDfriend()
265 static const Exc_t eH("Event::AssertESDfriend ");
268 throw(eH + "ALICE event not ready.");
269 if(gEvent->fESDfriend == 0)
270 throw(eH + "AliESDfriend not initialised.");
271 return gEvent->fESDfriend;
274 AliMagF* Event::AssertMagField()
278 if (gEvent && gEvent->fRunLoader && gEvent->fRunLoader->GetAliRun())
279 fgMagField = gEvent->fRunLoader->GetAliRun()->Field();
281 fgMagField = new AliMagFMaps("Maps","Maps", 1, 1., 10., AliMagFMaps::k5kG);