3 #include "EventAlieve.h"
5 #include <Reve/RGTopFrame.h>
7 #include <AliRunLoader.h>
9 #include <AliESDEvent.h>
10 #include <AliESDfriend.h>
11 #include <AliMagFMaps.h>
12 #include <AliCDBManager.h>
13 #include <AliHeader.h>
14 #include <AliGeomManager.h>
18 #include <TObjString.h>
26 using namespace Alieve;
28 //______________________________________________________________________
31 // Provide interface for loading and navigating standard AliRoot data
32 // (AliRunLoader) and ESDs.
34 // Missing support for raw-data. For now this is handled individually
35 // by each sub-detector.
40 Event* Alieve::gEvent = 0;
42 Bool_t Alieve::Event::fgAssertRunLoader = kFALSE;
43 Bool_t Alieve::Event::fgAssertESDTree = kFALSE;
45 TString Alieve::Event::fgCdbUri("local://$ALICE_ROOT");
47 AliMagF* Alieve::Event::fgMagField = 0;
53 fPath (), fEventId (0),
55 fESDFile (0), fESDTree (0), fESD (0),
56 fESDfriend (0), fESDfriendExists(kFALSE),
60 Event::Event(TString path, Int_t ev) :
61 EventBase("AliEVE Event"),
63 fPath (path), fEventId(-1),
65 fESDFile (0), fESDTree (0), fESD (0),
66 fESDfriend (0), fESDfriendExists(kFALSE),
70 if (ev >= 0) GotoEvent(ev);
73 /**************************************************************************/
77 static const Exc_t eH("Event::Open ");
79 gSystem->ExpandPathName(fPath);
81 fPath = Form("%s/%s", gSystem->WorkingDirectory(), fPath.Data());
85 TString ga_path(Form("%s/galice.root", fPath.Data()));
86 if(gSystem->AccessPathName(ga_path, kReadPermission) == kFALSE)
88 fRunLoader = AliRunLoader::Open(ga_path);
91 TString alice_path = fPath + "/";
92 fRunLoader->SetDirName(alice_path);
94 if (fRunLoader->LoadgAlice() != 0)
95 Warning(eH, "failed loading gAlice via run-loader.");
97 if (fRunLoader->LoadHeader() == 0)
99 runNo = fRunLoader->GetHeader()->GetRun();
103 Warning(eH, "failed loading run-loader's header.");
108 else // run-loader open failed
110 Warning(eH, "failed opening ALICE run-loader from '%s'.", ga_path.Data());
113 else // galice not readable
115 Warning(eH, "can not read '%s'.", ga_path.Data());
119 if(fgAssertRunLoader)
120 throw(eH + "Bootstraping of run-loader failed. Its precence was requested.");
122 Warning(eH, "Bootstraping of run-loader failed.");
126 TString esd_path(Form("%s/AliESDs.root", fPath.Data()));
127 if(gSystem->AccessPathName(esd_path, kReadPermission) == kFALSE)
129 fESDFile = new TFile(esd_path);
130 if(fESDFile->IsZombie() == kFALSE)
132 fESD = new AliESDEvent();
133 fESDTree = (TTree*) fESDFile->Get("esdTree");
136 fESD->ReadFromTree(fESDTree);
137 runNo = fESD->GetESDRun()->GetRunNumber();
139 // Check if ESDfriends exists and attach the branch
140 TString p = Form("%s/AliESDfriends.root", fPath.Data());
141 if(gSystem->AccessPathName(p, kReadPermission) == kFALSE)
143 fESDfriendExists = kTRUE;
144 fESDTree->SetBranchStatus ("ESDfriend*", 1);
145 fESDTree->SetBranchAddress("ESDfriend.", &fESDfriend);
150 delete fESDFile; fESDFile = 0;
151 Warning(eH, "failed getting the esdTree.");
154 else // esd tfile is zombie
156 delete fESDFile; fESDFile = 0;
157 Warning(eH, "failed opening ESD from '%s'.", esd_path.Data());
160 else // esd not readable
162 Warning(eH, "can not read ESD file '%s'.", esd_path.Data());
168 throw(eH + "ESD not initialized. Its precence was requested.");
170 Warning(eH, "ESD not initialized.");
175 throw(eH + "invalid run number.");
178 AliCDBManager* cdb = AliCDBManager::Instance();
179 cdb->SetDefaultStorage(fgCdbUri);
180 if (cdb->IsDefaultStorageSet() == kFALSE)
181 throw(eH + "CDB initialization failed.");
185 SetName(Form("Event %d", fEventId));
189 void Event::GotoEvent(Int_t event)
191 static const Exc_t eH("Event::GotoEvent ");
195 maxEvent = fRunLoader->GetNumberOfEvents() - 1;
197 maxEvent = fESDTree->GetEntries() - 1;
199 throw(eH + "neither RunLoader nor ESD loaded.");
201 if(event < 0 || event > maxEvent)
202 throw(eH + Form("event %d not present, available range [%d, %d].",
203 event, 0, maxEvent));
205 RGTopFrame::RedrawDisabler rd(gReve);
206 gReve->Redraw3D(kFALSE, kTRUE); // Enforce drop of all logicals.
210 SetName(Form("Event %d", fEventId));
214 if(fRunLoader->GetEvent(fEventId) != 0)
215 throw(eH + "failed getting required event.");
219 if(fESDTree->GetEntry(fEventId) <= 0)
220 throw(eH + "failed getting required event from ESD.");
222 if (fESDfriendExists)
223 fESD->SetESDfriend(fESDfriend);
226 AfterNewEventLoaded();
232 delete fESD; fESD = 0;
233 delete fESDfriend; fESDfriend = 0;
235 delete fESDTree; fESDTree = 0;
236 delete fESDFile; fESDFile = 0;
240 /**************************************************************************/
242 void Event::AfterNewEventLoaded()
244 TIter next(&fNewEventCommands);
246 while ((o = next())) {
247 TObjString* s = dynamic_cast<TObjString*>(o);
249 gInterpreter->ProcessLine(s->String());
253 void Event::AddNewEventCommand(const Text_t* cmd)
255 fNewEventCommands.Add(new TObjString(cmd));
258 /**************************************************************************/
259 /**************************************************************************/
261 // Static convenience functions.
263 AliRunLoader* Event::AssertRunLoader()
265 static const Exc_t eH("Event::AssertRunLoader ");
268 throw(eH + "ALICE event not ready.");
269 if(gEvent->fRunLoader == 0)
270 throw(eH + "AliRunLoader not initialised.");
271 return gEvent->fRunLoader;
274 AliESDEvent* Event::AssertESD()
276 static const Exc_t eH("Event::AssertESD ");
279 throw(eH + "ALICE event not ready.");
280 if(gEvent->fESD == 0)
281 throw(eH + "AliESD not initialised.");
285 AliESDfriend* Event::AssertESDfriend()
287 static const Exc_t eH("Event::AssertESDfriend ");
290 throw(eH + "ALICE event not ready.");
291 if(gEvent->fESDfriend == 0)
292 throw(eH + "AliESDfriend not initialised.");
293 return gEvent->fESDfriend;
296 AliMagF* Event::AssertMagField()
300 if (gEvent && gEvent->fRunLoader && gEvent->fRunLoader->GetAliRun())
301 fgMagField = gEvent->fRunLoader->GetAliRun()->Field();
303 fgMagField = new AliMagFMaps("Maps","Maps", 1, 1., 10., AliMagFMaps::k5kG);
308 TGeoManager* Event::AssertGeometry()
310 static const Exc_t eH("Event::AssertGeometry ");
312 if (AliGeomManager::GetGeometry() == 0)
315 AliGeomManager::LoadGeometry();
316 if ( ! AliGeomManager::GetGeometry())
318 throw(eH + "can not load geometry.");
320 if ( ! AliGeomManager::ApplyAlignObjsFromCDB("ITS TPC TRD TOF PHOS HMPID EMCAL MUON FMD ZDC PMD T0 VZERO ACORDE"))
322 ::Warning(eH, "mismatch of alignable volumes. Proceeding.");
323 // throw(eH + "could not apply align objs.");
327 return AliGeomManager::GetGeometry();